如果我不指定映射器的数量,如何确定数量?是否有从配置文件(例如 mapred-site.xml)读取的默认设置?
2 回答
在 Chris 上面添加的内容中添加更多内容:
映射的数量通常由输入文件中 DFS 块的数量决定。虽然这会导致人们调整他们的 DFS 块大小以调整地图的数量。
地图的正确并行度水平似乎在 10-100 个地图/节点左右,尽管对于非常 cpu-light 的地图任务,这可以达到 300 左右。任务设置需要一段时间,因此最好至少花费一分钟来执行地图。
您可以通过修改 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 决定了地图的数量。
这取决于许多因素:
- 输入格式和格式的特定配置属性
- 对于基于文件的输入格式(TextInputFormat、SequenceFileInputFormat 等):
- 输入文件/路径的数量
- 文件是可拆分的(通常压缩文件不是,SequenceFiles 是一个例外)
- 文件的块大小
可能还有更多,但希望你能明白