3

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

4

2 回答 2

6

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

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

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

  3. 您可以通过修改 JobConf 的 conf.setNumMapTasks(int num) 来增加 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

于 2012-05-15T04:15:14.760 回答
5

这取决于许多因素:

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

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

于 2012-05-14T22:20:12.017 回答