论文部分内容阅读
随着互联网的快速发展,信息正在呈爆炸式增长,每天都会产生海量的数据,存储和分析海量数据是目前的一个巨大挑战。近年来,云计算这一新计算模型自从诞生以来就备受关注,各大IT巨头们纷纷将云计算作为首要发展战略,提出了自己的云计算平台和云计算服务,并且已经有了显著的成果。MapReduce作为一种大规模数据的并行处理模型在云计算环境下受到广泛的应用,它以其简单易用,高可扩展性和容错性等特点被应用于很多领域。然而,它也存在问题,它不能有效地处理倾斜的数据。当MapReduce处理的数据分布不均匀时,会造成有些任务比其他任务运行较慢的情况,而整个作业的执行时间是由最慢的那个任务决定的,因此增加了整个作业的完成时间,使系统性能下降。本文对MapReduce中的倾斜问题进行了研究,提出了一种处理方法。本文的出发点是考虑当倾斜的数据存在时,如何高效地将MapReduce中Map阶段产生的中间结果划分给Reduce,使所有Reduce能够达到负载平衡。主要工作为:(1)统计输入文件中所有key的频次分布,由于统计所有数据的开销较大,所以本文采用抽样技术,估算keys的出现次数。将统计key频次分布这一操作用一个单独MapReduce作业来完成。并且,文中给出抽样的理论分析,证明抽取出的样本能够代替源输入文件进行key的频次估计。(2)根据统计出来的所有key的频次分布结果,提出两种划分方法:Cluster组合和Cluster分割,前者在数据倾斜度不大的时候较有效,后者在数据倾斜度较大的时候较有效。(3)实验证明使用抽样技术处理小部分数据能够较快地估计出key的频次分布,两种划分方法可以获得较快的执行时间,使Reduce得到很好的负载平衡。