论文部分内容阅读
大数据及其相关处理技术成为当今计算机科学领域和工业界最重要的技术之一,最为崭新的知识获取范式,商业公司和学术科研组织已经将大数据的获取、存储与处理能力作为其核心竞争力之一。大数据面临着诸多问题,数据的规模正在非线性增长,传统的数据库技术早已不能满足大数据的要求。Google公司于2004年提出的MapReduce框架成为大数据时代具有里程碑意义的技术,然而近年来层出不穷的新场景、新应用却使MapReduce的开源实现Hadoop遭遇前所未有的冲击。2011年由Matei Zaharia提出的基于RDD即弹性分布式数据集概念的通用内存计算框架Spark在批量计算、迭代计算和流式计算等高速场景表现良好,但是这两种通用模型都要面对数据倾斜的问题,实际上只有少数系统如HBase、Pig等才有相应的防倾斜策略。本文深入探讨并总结了 RDD的原理和Spark的执行流程,结合MapReduce下的传统策略,分析了其处理数据倾斜的缺陷,致力于引入少量改动而大幅提高其缓解数据倾斜的性能,最终实现了优化的SASM策略。Spark将最小的调度粒度控制在任务层,每个任务中处理的数据量在任务执行中是不可变的。但是Spark在实现时良好的分层结构使调度粒度控制变得更加灵活,使其在数据倾斜场景下有很大的优化空间。SASM的核心思想为将调度粒度下移到文件块层,使得数据能在任务层自由调度,最大程度平衡各个任务的负载量。SASM为了减少文件调度前由扫描引起的大量磁盘I/O开销,只利用任务在执行中用于获取真实数据的文件块元数据,并以此为基础计算调度策略,为了避免不必要的调度,调度策略只辨识执行最慢的任务,并将其所属文件块分配给执行较快的数个任务。Shuffle时的下游任务除了接受Spark调度系统传送的文件块,还在任务执行过程中动态添加或者删除文件块。调度系统基于异步消息模型,即可以保证指令的顺序执行,也可以避免消息处理阻塞数据处理过程,提高的CPU处理效率,代价是消息接收方需要对消息有效性做出鉴别。SASM策略在执行中会同时收集任务的计算速度和网络传输速度,通过将其纳入调度方案的计算使调度更加公平。本文还讨论了其他配套的优化措施,包括维持执行器池和拉取器分阶段处理,一定程度上增加了该策略下的调度空间,提高了其效用。最后,本文设计并执行了大量实验,对SASM引入的新特性进行了认真的评估,包括实验数据结果的分析、理论推演与论证、实验数据的佐证。SASM策略在数据倾斜场景下的性能优于原先的Spark,但是对于存在多个拉取器的任务会引入一定的阻塞开销,这会导致在数据零倾斜场景下性能的下滑,同时实验证明计算调度方案的开销较小。最后验证了该策略分别在计算性能不平衡和网络传输速度不平衡的场景下对性能的有效提高。在实践中,一些细微的改动也可以带来较大的性能提升,因此深入并细致的分析程序的每一处瓶颈资源并做出对应的优化,往往可以达到事半功倍的效果。