论文部分内容阅读
互联网的普及、智能手机的广泛使用,给海量数据分析处理技术带来了新的挑战。传统的单机处理方法需要几天甚至几月的时间来处理海量数据,而分布式计算通过把复杂计算任务的子集分配给多台计算机协作完成,从而提高了计算效率。在批处理场景中广泛应用的是Hadoop平台的MapReduce框架。MapReduce应用广泛的原因之一在于它的易用性,它提供了一个因高度抽象化而变得异常简单的编程模型。Hadoop的设计理念主要针对大批量数据处理场景,它在处理大规模数据集时具有良好的吞吐量,但是不适合实时性要求较高的场景。任务的启动和磁盘读写花费了较多的时间,导致Hadoop的计算需要秒级的延迟。在实时处理场景中Twitter公司开发的Storm框架表现不错,Storm是个实时的、分布式以及具备高容错的计算系统。正在发展的Storm Trident对Storm进行了批处理的封装,但是Storm Trident的编程模型较复杂,不易使用,中间数据的传递存在内存溢出的风险,Trident不能对状态进行Checkpoint方式的容错,而且状态存在分布式不一致的风险。本文研究了分布式并行处理技术,提出了一种基于Storm的分布式增量计算框架,具有编程模型简单、计算时延小、高效容错等优点。主要工作如下:(1)抽象Storm较底层的原语,提出并设计了一种基于Storm的MapReduceMerge增量计算模型。开发者可以轻易的从MapReduce模型过渡到MapReduceMerge模型。(2)设计Map到Reduce批计算模式的数据传递,并处理Reduce的数据溢出。使用Push和自主协调的方式来改善中间数据传递的实时性。采用散列因子来均衡各批次的任务分配,从而提高在数据倾斜情况下的系统吞吐量。(3)采用Checkpoint的容错机制来降低Merge状态容错对计算性能的影响。使用间隔批次的检查点方案,以出错后恢复时间的增加来换取正常计算性能的提升。使用异步的数据存储能在计算资源充足时不干扰正常计算,使用数据的多版本来保证分布式环境的一致性。(4)使用内存Snapshot来保证Merge状态计算的偏序和幂等,并能避免数据的反复计算,从而降低计算失败时的重做花费时间。设计主节点与计算节点的协作来保证Checkpoint的全序。为了验证本文框架的实时和易用等优点,搭建了分布式计算环境,编写了实例,选择并构建MapReduce和Storm进行对比。测试结果证明,本文所提出的框架提高了分布式增量计算的实时性,并且能在不牺牲性能的情况下完成增量结果的容错。