大数据产品的一种测试方法与实现
ETL是按一定规则针对数据进行清洗,抽取,转换等一系列操作的简写。那么一般来说他要能够处理很多种不同的数据类型。 我们在生产上遇见的bug有很大一部分占比是生产环境遇到了比较极端的数据导致我们的ETL程序无法处理。 比如: 数据拥有大量分片 在分布式计算中,一份数据是由多个散落在HDFS上的文件组成的, 这些文件可能散落在不同的机器上, 只不过HDFS会给使用者一个统一的视图,让使用者以为自己在操作的是一个文件,而不是很多个文件。 这是HDFS这种分布式文件系统的存储方式。 而各种分布式计算框架, 比如hadoop的MapReduce,或者是spark。 就会利用这种特性,直接读取散落在各个机器上文件并保存在那个节点的内存中(理想状态下,如果资源不够可能还是会发生数据在节点间迁移)。 而读取到内存中的数据也是分片的(partition)。 spark默认以128M为单位读取数据,如果数据小于这个值会按一个分片存储,如果大于这个值就继续往上增长分片。 比如一个文件的大小是130M, spark读取它的时候会在内存中分成两个partition(1个128M,1个2M)。 如果这个文件特别小,只有10M,那它也会被当做一个partition存在内存中。 所以如果一份数据存放在HDFS中,这个数据是由10个散落在各个节点的文件组成的。 那么spark在读取的时候,就会至少在内存中有10个partition, 如果每个文件的大小都超过了128M,partition的数量会继续增加。 而在执行计算的时候,这些存储在多个节点内存中的数据会并发的执行数据计算任务。 也就是说我们的数据是存放在多个节点中的内存中的, 我们为每一个partition都执行一个计算任务。 所以我们针对一个特别大的数据的计算任务, 会首先把数据按partition读取到不同节点的不同的内存中, 也就是把数据拆分成很多小的分片放在不同机器的内存中。 然后分别在这些小的分片上执行计算任务。 最后再聚合每个计算任务的结果。 这就是分布式计算的基本原理。
那么这个时候问题就来了, 这种按partition为单位的分布式计算框架。partition的数量决定着并发的数量。 可以理解为,如果数据有 (编辑:淮南站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |