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

Hadoop中哪个节点对键进行排序/洗牌?,hadoop,mapreduce,elastic-map-reduce,Hadoop,Mapreduce,Elastic Map Reduce,在Hadoop作业中,排序/洗牌阶段是哪个节点?增加该节点的内存是否会提高排序/洗牌的性能?排序和洗牌阶段在映射器和还原器之间划分。这就是为什么当映射程序仍在运行时,我们看到Reduce%增加了(通常直到33%) 增加排序缓冲区内存和由此获得的性能增益取决于: a) 映射器发出的关键帧的大小/总数 b) 映射器任务的性质:(IO密集型、CPU密集型) c) 可用主内存,映射/减少给定节点中的插槽(已占用) d) 数据偏斜 您可以找到更多信息@根据我的经验,要在mapred.site.xml中调整

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

排序和洗牌阶段在映射器和还原器之间划分。这就是为什么当映射程序仍在运行时,我们看到Reduce%增加了(通常直到33%)

增加排序缓冲区内存和由此获得的性能增益取决于:

a) 映射器发出的关键帧的大小/总数

b) 映射器任务的性质:(IO密集型、CPU密集型)

c) 可用主内存,映射/减少给定节点中的插槽(已占用)

d) 数据偏斜


您可以找到更多信息@

根据我的经验,要在mapred.site.xml中调整的相关参数有:

  • io.sort.mb
    这是映射器的输出缓冲区。当此缓冲区已满时,数据将被排序并溢出到磁盘。理想情况下,避免多次泄漏。请注意,此内存是maptask堆大小的一部分
  • mapred.map.child.java.opts
    这是映射任务的堆大小,越大,输出缓冲区大小越大
  • 原则上,reduce任务的数量也会影响洗牌速度。reduce轮数是reduce槽的总数/reduce任务的数量。请注意,初始洗牌(在映射阶段)只会将数据洗牌到活动还原器。因此
    mapred.reduce.tasks
    也是相关的
  • io.sort.factor
    是在map和reduce端执行合并排序的线程数
  • 压缩也有很大的影响(它加快了从mapper到reducer的传输,但是compr/decompr是有代价的
  • mapred.job.shuffle.input.buffer.percent
    是还原程序堆中存储映射输出到内存中的百分比

毫无疑问,还有更多的调优机会,但这些都是我花了很长时间玩弄的机会。

谢谢。我如何更改代码中的
mapred.map.child.java.opts
?因为我节点可以访问Hadoop集群的配置文件。conf=new Configuration();conf.set(“mapred.child.java.opts”,“所需堆大小”);作业作业=新作业(conf);