论文部分内容阅读
随着互联网行业的不断发展,越来越多的新兴产业加入到大数据的浪潮中,它们每天产出着海量的信息。分布式计算的出现,为处理海量数据的分析和处理提供了强有力的支持,同时也为一些成熟的服务(例如站点数据分析、日志分析等)指明了优化和升级的方向。这些不断产生的海量数据有一个重要的特征,即已经产生的数据很少会被修改,而后续收集的数据往往只是追加在数据集的末尾。因此在处理这种情景时,增量计算成为一种有力的手段。Incoop和HadUP是两种可以高度适应用户业务的增量计算框架。其中,Incoop采用任务级别结果重用的策略来实现增量计算。它先在初始化阶段执行一次全量计算,并将map task的结果保存起来。接着,在后续的增量计算中,map task根据输入分片split的指纹到结果缓存区中查询计算结果,如果能找到则直接获取计算结果,不再计算;否则需要对该map task的输入数据进行重新计算。HadUP采用了亚任务级别的结果重用策略,它利用定长划分将分片向下细化为segment和chunk两级。然后利用基于去重的快照差分算法(D-SD),计算新、旧数据差集,再与之前的历史结果进行合并,得出当前数据集的计算结果。它的缺点在于,当数据的修改发生的位置越靠前,定长划分中由于数据更新引起的偏差就会越大,计算的效率越低下。另外,D-SD算法对MapReduce的底层框架进行了修改,降低了实用性。为了解决这一问题,本文设计并实现了一种基于Hadoop的增量式数据处理系统HadInc。它结合Incoop和HadUP的优点,利用Incoop基于内容划分的思想,得到了稳定性更高的划分结果。除此之外,HadInc还改进了HadUP算法的差集数据分析模块,提高了细粒度划分的稳定性,从而提高了由于细粒度结果重用的命中率。这使得系统在运行时就能得到被修改的数据,并将其及时交付给其他外部应用,而不用等到整个Job执行结束后,才获取差集数据。基于上述思想,Had Inc将不同算法的优点糅合起来,使得自身能够适应更加广泛的应用场景,例如较多分片发生少量修改、个别分片大量修改等。在测试阶段,本文先对增量计算各个步骤的耗时进行了分析,解释说明了数据集的规模以及更新率对增量计算的影响;接着,对增量计算中的三个重要环节进行了优化,并展示和说明了优化结果;最后,本文设计了多个应用场景来验证HadInc的有效性,其中包括:1)少量分片的少量数据被修改;2)大量分片的少量数据被修改;3)少量分片的大量数据被修改;4)不同规模的大数据下,设置不同的分片大小,对比HadInc与其他算法的计算效率;5)利用维基百科的真实数据进行实用性检测。测试显示,HadInc系统在多数情况下表现良好,不但能够处理更加复杂的增量数据更新场景,还能保持更加稳定的计算效率,足以见得HadInc有着极高的可靠性和广泛适用性。