【问题标题】:Hadoop MapReduce: default number of mappersHadoop MapReduce:映射器的默认数量
【发布时间】:2012-05-15 12:15:14
【问题描述】:

如果我不指定映射器的数量,如何确定数量?是否有从配置文件(如 mapred-site.xml)读取的默认设置?

【问题讨论】:

    标签: hadoop mapreduce


    【解决方案1】:

    在上面 Chris 添加的内容中添加更多内容:

    1. 映射的数量通常由输入文件中 DFS 块的数量决定。虽然这会导致人们调整他们的 DFS 块大小以调整地图的数量。

    2. 地图的正确并行度水平似乎在 10-100 个地图/节点左右,尽管对于 CPU 非常轻的地图任务,这可以达到 300 左右。任务设置需要一段时间,因此最好至少花费一分钟来执行地图。

    3. 您可以通过修改 JobConf 的 conf.setNumMapTasks(int num) 来增加 Map 任务的数量。注意:这可能会增加 map 任务的数量,但不会设置低于 Hadoop 通过拆分输入数据确定的数量。

    最后控制地图的数量是微妙的。 mapred.map.tasks 参数只是对 InputFormat 地图数量的提示。默认的 InputFormat 行为是将总字节数拆分为正确数量的片段。但是,在默认情况下,输入文件的 DFS 块大小被视为输入拆分的上限。 可以通过 mapred.min.split.size 设置拆分大小的下限。

    因此,如果您期望 10TB 的输入数据和 128MB 的 DFS 块,那么您最终将得到 82k 个地图,除非您的 mapred.map.tasks 更大。最终,InputFormat 决定了地图的数量。

    阅读更多:http://wiki.apache.org/hadoop/HowManyMapsAndReduces

    【讨论】:

    • 似乎是 hadoop wiki 的直接副本。也许这个答案应该被解释,或者你可以让它更具体地解决这个问题。
    • 我有一个问题。 “10TB 的输入数据和 128MB 的 DFS 块,你最终会得到 82k 的地图,除非你的 mapred.map.tasks 更大。”所以我可以将 min.split.size 设置为 256MB 并减少数量吗?映射器减半?
    【解决方案2】:

    这取决于许多因素:

    • 输入格式和格式的特定配置属性
    • 对于基于文件的输入格式(TextInputFormat、SequenceFileInputFormat 等):
      • 输入文件/路径数
      • 文件是可拆分的(通常压缩文件不是,SequenceFiles 是一个例外)
      • 文件的块大小

    可能还有更多,但希望你能明白

    【讨论】:

    • 谢谢克里斯。如果我指定一个数字,它不一定会被 Job tracker 接受?
    • 使用新的(.mapreduce 打包的)API,这完全被忽略了。旧的 API 可能会 - 查看 o.a.h.mapred.FileInputFormat.getSplits() 的源代码(您正在使用的 hadoop 版本)
    猜你喜欢
    • 2019-09-23
    • 2016-01-21
    • 1970-01-01
    • 1970-01-01
    • 2020-05-15
    • 1970-01-01
    • 2014-06-09
    • 1970-01-01
    • 2011-08-28
    相关资源
    最近更新 更多