那些MapReduce负载均衡的论文级方法
Posted 睡前学学大数据
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了那些MapReduce负载均衡的论文级方法相关的知识,希望对你有一定的参考价值。
本文介绍了几篇关于MapReduce负载均衡方法的论文。数据倾斜问题影响大规模MapReduce集群性能的首要因素。改善任务的负载均衡具有重要意义。
回顾:数据倾斜出现的原因
MapReduce默认对map阶段产生的key进行hash值取模划分,所以拥有相同key的键值对被分配到同一个分区,而每一个分区对应一个reducer。当某个key出现的频率远高于其他key时,其对应的reducer任务会出现负载过重、运行时间过长的现象。这就是数据倾斜问题。
Hive是基于MapReduce的数据仓库查询引擎,可将SQL语句转化为MapReduce任务执行。在Hive中,数据倾斜问题主要发生在join查询时。
当前大部分的负载均衡方法都可分为两个阶段:
1、估算key分布
2、基于key分布设计负载均衡的key划分
key分布估算的方式包括:
1、预先估算:在运行正式的作业之前,预先运行一次专门的MapReduce作业,对key值进行采样与统计。然而,这种预先估算会推迟正式作业的启动时间。
2、运行时估算:首先,在目标作业运行时监控每个map的输出并对key进行采样;然后将样本汇总给一个中央节点,构建全局的key分布。然而为了避免map阶段的网络拥堵,这种监控采样的采样率不能太高,因此估算key分布的准确性受限。另一个缺点是,shuuffle被推迟执行。Hadoop默认在5%的mapper执行完成时开始shuffle,而引入监控采样后必须要在采样、估算、key划分等工作完成后才能启动shuffle,无形中延长了作业的执行时间。
key划分方式可分为以下四类:
1、区间划分:将key值的区间划分为负载(用key频率衡量)相同的子区间
2、逐key划分:依次将最高频的未分配key分配到负载最轻的分区中
3、hash再划分:在hash划分的基础上合并小分区,拆分大分区
4、自适应划分:调整straggler(即运行最慢的任务)未处理数据的划分
Kwon等人[1]提出在样本数据上预先执行一次目标作业,以采集key取值区间并进行区间划分。Hadoop自带的InputSampler.RandomSample是目前最为常用的区间划分工具,其在执行目标作业前,先在1个节点上执行如下操作:
1) 从全部输入数据块中选出要进行采样的块;
2) 流式读取每个采样块并从中随机选取样本;
3) 计算出全部样本的key,并按key值的大小对全部样本进行排序;
4) 将样本序列的等分位点作为区间划分的分割点
LEEN[2]基于监控采样的结果进行逐key划分。由于需要记录每个key归属的分区,通过逐key划分得出的分区方案很复杂,用于查找key所属分区的开销太大,因此其并不实用。
TopCluster[3]和LIBRA[4]基于监控采样的结果进行区间划分。
TopCluster只对每个mapper输出中的高频key计算全局频率以减少通信开销。
LIBRA只对最先运行的一小部分mapper的输出进行采样以减轻对shufle的拖延。
Ke等人[5]提出预先执行一次目标作业,从而对hash划分的结果进行调整,以优化负载均衡。这种粗粒度的hash再划分虽然开销小,但不一定能够实现较好的负载均衡。
为扩大了hash再划分的负载均衡提升空间,Yan等人[6]提出了基于监控采样的多hash再划分:
1) 在map阶段同时使用多种hash函数对全体数据的key进行细粒度的划分;
2) 依次对每种hash划分的细粒度分区进行组合,得出负载尽量均衡的候选划分方案;
3) 从候选划分方案中选出负载最均衡者作为最终划分方案。
王卓等人[7]提出了基于监控采样的多hash渐进再划分:
1)在map的早期阶段就把部分分区分配给reducer;
2) 随着mapper的执行,不断统计每个分区的负载量,并据此逐渐将剩余的分区均衡地分配给reducer。与多hash再划分相比,多hash渐进再划分可以提早启动shuffle。
SkewTune[8]是一种自适应划分方案:只为straggler的未处理数据重新划分key,从而将straggler的部分负载迁移到其他节点上.对于小作业,SkewTune的重划分开销不可忽略[8]。此外,自适应划分只能在现有划分的基础上改进负载均衡,并不一定能够实现reducer的负载均衡。
Kwon等人[1]提出在样本数据上预先执行一次目标作业,以采集key取值区间并进行区间划分。Hadoop自带的InputSampler.RandomSample是目前最为常用的区间划分工具,其在执行目标作业前,先在1个节点上执行如下操作:
1) 从全部输入数据块中选出要进行采样的块;
2) 流式读取每个采样块并从中随机选取样本;
3) 计算出全部样本的key,并按key值的大小对全部样本进行排序;
4) 将样本序列的等分位点作为区间划分的分割点
最近王华进[9]等人提出了一种预先估算/区间划分的新方法。这种方法基于ORC元数据估算key频率分布,未增加作业的运算环节,效率更高。但当join字段的ORC row index条目的key区间交错程度较大时该方法不适用。
难能可贵的是,文献[9]发表于2018年3月,而且是博士论文,其创新性不言而喻。笔者曾以为,Hive已经发展得非常成熟(最早介绍Hive的论文[10]可追溯到2009年),而负载均衡更是其中研究的热门,其剩余的改进空间很小。然而文献[9]的发表说明,Hive(尤其是负载均衡方法)如何进一步改进,仍值得我们深入思考。
至于改进的方向,笔者认为应该向“专用性”方面突破。Hive在设计的时候,必然要考虑到方案的“通用性”,因此像文献[9]中的方法不太可能出现在Hive的官方版本中。但恰恰由于 “专用性”,该方法在某些情况下明显优于官方、甚至其他研究者。只要能从一个独特的角度切入,找到合适的应用场景,就能在“专用性”方面取得突破。
[1] Kwon, Y. C., Balazinska, M., Howe, B., & Rolia, J. (2010). Skew-resistant parallel processing of feature-extracting scientific user-defined functions. ACM Symposium on Cloud Computing, SOCC 2010, Indianapolis, Indiana, Usa, June (pp.75-86). DBLP.
[2] Ibrahim, S., Jin, H., Lu, L., Wu, S., He, B., & Qi, L. (2010). LEEN: Locality/Fairness-Aware Key Partitioning for MapReduce in the Cloud. IEEE Second International Conference on Cloud Computing Technology and Science (pp.17-24). IEEE Computer Society.
[3] Gufler, B., Augsten, N., Reiser, A., & Kemper, A. (2012). Load Balancing in MapReduce Based on Scalable Cardinality Estimates. IEEE, International Conference on Data Engineering (Vol.41, pp.522-533). IEEE.
[4] Chen, Q., Yao, J., & Xiao, Z. (2015). Libra: lightweight data skew mitigation in mapreduce. IEEE Transactions on Parallel & Distributed Systems, 26(9), 2520-2533.
[5] Ke, Q., Prabhakaran, V., Xie, Y., Yu, Y., Wu, J., & Yang, J. (2011). Optimizing data partitioning for data-parallel computing.
[6] Yan, W., Xue, Y., & Malin, B. (2013). Scalable and robust key group size estimation for reducer load balancing in MapReduce. IEEE International Conference on Big Data (pp.156-162). IEEE.
[7] Zhuo, W., Chen, Q., Zhan-Huai, L. I., Wei, P., Li, Y., & Computer, S. O. (2016). An incremental partitioning strategy for data balance on mapreduce. Chinese Journal of Computers.
[8] Kwon, Y. C., Balazinska, M., Howe, B., & Rolia, J. (2012). Skewtune:mitigating skew in mapreduce applications. Proceedings of the Vldb Endowment, 5(12), 25-36.
[9] 王华进, 黎建辉, 沈志宏, & 周园春. (2018). 基于orc元数据的hive join查询reducer负载均衡方法. Computer Science, 45(3), 158-164.
微信ID:BigDataTips
评论功能现已开启,我们接受一切形式的吐槽和赞美☺️
以上是关于那些MapReduce负载均衡的论文级方法的主要内容,如果未能解决你的问题,请参考以下文章