hadoop中哪个节点对键进行排序/洗牌?

e1xvtsh3  于 2021-06-03  发布在  Hadoop
关注(0)|答案(2)|浏览(351)

在hadoop作业中,哪个节点执行排序/洗牌阶段?增加该节点的内存是否会提高排序/洗牌的性能?

jucafojl

jucafojl1#

排序和洗牌阶段在Map器和还原器之间进行划分。这就是为什么我们看到reduce%在Map程序仍在运行时增加(通常增加到33%)。
增加排序缓冲区内存以及由此获得的性能增益取决于:
a) Map器发出的键的大小/总数
b) Map器任务的性质:(io密集型,cpu密集型)
c) 可用主内存,Map/减少给定节点中的插槽(已占用)
d) 数据偏斜
您可以在@https://www.inkling.com/read/hadoop-definitive-guide-tom-white-3rd/chapter-6/shuffle-and-sort

5ktev3wc

5ktev3wc2#

根据我的经验,要在mapred.site.xml中调优的相关参数有: io.sort.mb 这是Map器的输出缓冲区。当缓冲区满时,数据被排序并溢出到磁盘。理想情况下,你要避免多次泄漏。请注意,此内存是maptask堆大小的一部分。 mapred.map.child.java.opts 这是Map任务的堆大小,越大,输出缓冲区大小就越大。
原则上,reduce任务的数量也会影响洗牌速度。reduce rounds是reduce slot的总数/reduce任务的数量。请注意,初始洗牌(在map阶段)只会将数据洗牌到活动的reducer。所以呢 mapred.reduce.tasks 也是相关的。 io.sort.factor 在map和reduce端执行合并排序的线程数。
压缩也有很大的影响(它加速了从mapper到reducer的传输,但是compr/decompr是有代价的! mapred.job.shuffle.input.buffer.percent 是在内存中存储Map输出的reducer堆的百分比。
毫无疑问,还有更多的调优机会,但这些都是我花了很长时间玩的机会。

相关问题