论文部分内容阅读
随着计算机技术的飞速发展,各行各业的数据以指数形式爆炸式增长。大数据时代已经来临,给互联网行业带了巨大的机遇与挑战。一方面,大数据资源蕴含着巨大的社会价值和商业价值,有效地管理这些数据、挖掘数据的深度价值,对国家治理、社会管理、企业决策和个人生活将带来深远的影响。另一方面,大数据有着数据量大、增长快、类型多、难辨识和价值大密度低等特征,传统的数据处理系统和技术已经很难满足大数据处理的需求。当前,并行处理是处理大量数据有效的方式。Map Reduce已经发展成为标准并行编程模型。作为Map Reduce框架流行的开源实现之一,Apache Spark具有高效性、可扩展性、容错性和易用性等优势,在学术界和工业界得到极大关注和广泛使用。尽管与Apache Hadoop相比,Spark基于内存计算提供更加强大的计算能力,但在实际使用中仍受到性能瓶颈的困扰。因此,如何改善Spark在面对大数据处理时的性能已经迫在眉睫。鉴于此,本文分别从容错机制、任务调度、数据通信和任务负载均衡等四个方面,对基于内存计算的Spark分布式计算框架的性能优化展开研究。本文的主要工作和创新点如下:(1)从容错机制方面,提出了一种异构环境中智能推测执行策略,来解决Spark中的Straggler问题。由于一些固有的缺陷,Spark中原始的推测执行机制不能有效解决该问题,尤其是在异构集群环境中,甚至引起性能的下降。本文中针对异构环境着重解决推测执行的三个关键问题:慢任务判断、备份节点选择和推测任务有效性保证。此外,为了尽量减少Straggler的误判,考虑数据本地性和数据偏斜因素的影响。在Spark集群中使用多个微基准(Sort和Word Count)、宏基准(Kmeans和LDA)和Hi Bench评估性能。实验结果表明所提出策略将Straggler判断准确度提高到了80%、召回率提高到了90%以上,以及平均查找时间减少了60秒以上。(2)从任务调度方面,提出了一种最优的本地性感知任务调度算法,以获得每阶段内任务的数据本地性全局最优。Spark任务调度器采用贪婪的调度策略没有考虑任务放置之间的相互影响,导致数据本地性局部最优。本文针对Map和Reduce阶段通信模式不同,利用二分图分别对Map和Reduce任务调度进行统一建模,然后制定最小化总通信代价的调度方案。最后将该任务调度问题转化为图匹配问题进行求解。在Spark集群中使用多个微基准(Word Count和Join)、宏基准(Page Rank和LDA)和Hi Bench评估性能。实验结果表明与其他算法相比,所提出任务调度算法可以减少35%的作业执行时间和38%的网络流量。(3)从数据通信方面,首次提出一种优化总通信距离的Executor分配方法,以减少任务数据通信延迟。Spark中提供两种Executor分配方法:Spread Out和No Spread Out,都有可能导致任务之间较远的数据传输距离。本文通过计算Executor距离矩阵,制定最小化总通信距离的Executor分配方案。然后针对Executor之间距离满足和不满足三角不等式两种情况,分别提出一种最优Executor分配近似算法和一种Executor集合扩充算法。在Spark集群中使用多个微基准(Sort和Join)和宏基准(Page Rank和LDA)评估性能。实验结果表明所提出方法可以减少24%~45%的任务数据访问时间。(4)从任务负载均衡方面,提出一种自适应中间数据分区方法,以使Shuffle阶段数据分区均匀。Spark中提供的哈希(Hash)和范围(Range)分区器很容易导致Reduce任务负载失衡,而这对于Spark Streaming流计算环境中作业的性能影响尤其明显。本文根据先前已处理微批预估下一批作业中间数据key分布。然后针对中间数据分配不均,在范围分区方案基础上提出了一系列优化措施,其中特别考虑了Shuffle操作前后的分区平衡。在Spark集群中使用多个微基准(Word Count和Sort)和宏基准(Page Rank和LDA)评估性能。实验结果表明所提出的分区方法可以平衡Reduce任务负载。本文工作有较大的理论和应用价值,特别是在大数据背景下,改善Spark分布式框架的性能,充分利用大数据平台的并行处理能力,对提高海量数据处理中的各种应用性能有很大的实际意义。