【发布时间】:2012-05-15 12:15:14
【问题描述】:
如果我不指定映射器的数量,如何确定数量?是否有从配置文件(如 mapred-site.xml)读取的默认设置?
【问题讨论】:
如果我不指定映射器的数量,如何确定数量?是否有从配置文件(如 mapred-site.xml)读取的默认设置?
【问题讨论】:
在上面 Chris 添加的内容中添加更多内容:
映射的数量通常由输入文件中 DFS 块的数量决定。虽然这会导致人们调整他们的 DFS 块大小以调整地图的数量。
地图的正确并行度水平似乎在 10-100 个地图/节点左右,尽管对于 CPU 非常轻的地图任务,这可以达到 300 左右。任务设置需要一段时间,因此最好至少花费一分钟来执行地图。
您可以通过修改 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 决定了地图的数量。
【讨论】:
这取决于许多因素:
可能还有更多,但希望你能明白
【讨论】:
o.a.h.mapred.FileInputFormat.getSplits() 的源代码(您正在使用的 hadoop 版本)