【问题标题】:Which node sort/shuffle the keys in Hadoop?哪个节点对 Hadoop 中的键进行排序/洗牌?
【发布时间】:2013-10-30 05:54:04
【问题描述】:

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

【问题讨论】:

    标签: hadoop mapreduce elastic-map-reduce


    【解决方案1】:

    根据我的经验,调整 mapred.site.xml 的相关参数是:

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

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

    【讨论】:

    • 谢谢。如何更改代码中的mapred.map.child.java.opts?因为我的节点可以访问 Hadoop 集群的配置文件。
    • 配置 conf = new Configuration(); conf.set("mapred.child.java.opts", "所需堆大小");工作job = new Job(conf);
    【解决方案2】:

    Sort And Shuffle Phase 分为 Mappers 和 Reducers。这就是我们在 Mapper 仍在运行时看到 Reduce % 增加(通常达到 33%)的原因。

    增加排序缓冲内存和从中获得的性能将取决于:

    a)映射器发出的密钥的大小/总数

    b) Mapper 任务的性质:(IO 密集型,CPU 密集型)

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

    d) 数据偏度

    您可以找到更多信息@https://www.inkling.com/read/hadoop-definitive-guide-tom-white-3rd/chapter-6/shuffle-and-sort

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多