论文部分内容阅读
从云计算的涌现到其目前发展得如此成熟都应归功于现实环境的促进和互联网技术的发展。首先,互联网在各行各业的迅速普及,使得数据量呈爆发式地增长。国际数据公司(IDC)的一项研究统计显示,全球2010年所产生的数据量约是1.3ZB,而第二年又增加了约0.6ZB,这就是说地球上每一个人产生的数据最少200GB大小,此后增长得更迅猛。数据量早已不是那个TB的时代,更大的数据级别即将到来。那么怎么合理地存储并处理这些海量数据是人们面临的一个重大难题。其次,由于云计算具有压倒性的成本优势,各大公司都把主要的战略投向云计算技术,也使得云计算的发展极为迅速。MapReduce已被证明在其上可以提供有效而且强大的并行处理方法,通过此模型,一些没有操作过并行程序处理的程序员同样可运用得游刃有余,可是MapReduce自身还存在着不足之处,那就是MapReduce的数据倾斜(Data Skew)在运行中普遍的存在。当大型数据集中数据分布不均衡时,会在运行时使得节点的负载不平衡,个别的任务会成为整个作业的“落后者”,从而导致整个系统的性能降低,整个作业运行时间也被延长了。本论文研究的问题就是如何高效地解决在MapReduce程序运行中Reduce阶段出现的数据倾斜情况,现有的一些方法都是异步的,这样降低了MapReduce的同步性,因此本论文主要采用“先预处理,后划分”的策略,使Reducer达到负载平衡。首先使用一种二层抽样的技术统计出数据集上key的基数分布情况,然后根据这个分布情况提前制定出分配策略,改善默认Hash分区的不足,采用了两种划分策略:小簇组合和大簇分割。小簇组合适用数据倾斜程度不太严重的情况下,而大簇分割在数据倾斜程度严重的情况表现出色。实验证明基于二层抽样的MapReduce负载平衡技术可以使Reduce阶段达到较好的负载平衡,进而提高系统的性能。