论文部分内容阅读
大数据时代,学术界和工业界广泛采用大规模的大数据平台,处理来自不同应用程序和数据源的大量数据,而数据倾斜被认为是威胁大数据平台性能的重要因素之一。现有对于数据倾斜问题的研究多是基于Hadoop平台,对诸如Spark之类的内存计算平台的研究很少。在Spark的执行过程中,由于输入数据分布的不均衡以及Spark默认分区算法分配的不均衡,同样存在数据倾斜问题,如何减少Spark平台上大数据应用的总完工时间是一项重大挑战。由于大数据平台的较小质量改进可导致较大执行效率提升,所以本论文将Spark平台中的数据倾斜问题作为研究对象,首先分析了原生Spark平台产生数据倾斜的原因,然后重点对如何通过数据均衡分配来减少大数据应用的总完工时间进行了较详尽的研究,并提出了两种数据均衡分配算法。主要研究内容为:首先,对业界数据倾斜问题研究现状进行了全面的总结与分析,按照处理阶段和数据分区函数的不同划分了多种类型的数据倾斜问题,对每种类型数据倾斜问题的相关解决方案进行了分析与总结;然后,对Spark平台的设计思想进行梳理,包括Spark平台的计算模型与整体架构、Spark数据存储体系、Spark Shuffle读写机制以及两种Spark原生的数据分区算法,为数据均衡分配算法的实现奠定基础;其次,提出了一种解决Spark平台中Reduce型数据倾斜问题的数据均衡分配算法ReducePartition,计算节点根据抽样算法对本地中间数据进行抽样,预测数据分布的总体特征,为了充分利用集群资源,将数据均衡划分为多个分区,同时考虑Executor之间计算能力的差异性,将任务按照贪心策略分配给性能因子最高的Executor,以此来减少大数据应用的总完工时间;然后,提出了一种解决Spark平台中Map&Reduce型数据倾斜问题的数据均衡分配算法MRFair,MRFair通过对任务的剩余计算时间进行预估,将剩余运行时间最长的任务的未被处理的数据重新分配给其他空闲节点的新任务,尽量消除数据倾斜的影响,减少大数据应用的总完工时间;最后,搭建异构Spark Standalone集群,并用上述算法与相关算法进行WordCount以及Sort基准测试对比分析,分析上述算法在不同数据倾斜度、不同数据量大小下的性能,多组测试验证了本论文提出的算法可以有效降低数据倾斜问题对Spark大数据应用总完工时间的影响。