在hadoop作业中,哪个节点执行排序/洗牌阶段?增加该节点的内存是否会提高排序/洗牌的性能?
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
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堆的百分比。毫无疑问,还有更多的调优机会,但这些都是我花了很长时间玩的机会。
io.sort.mb
mapred.map.child.java.opts
mapred.reduce.tasks
io.sort.factor
mapred.job.shuffle.input.buffer.percent
2条答案
按热度按时间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
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堆的百分比。毫无疑问,还有更多的调优机会,但这些都是我花了很长时间玩的机会。