【发布时间】:2016-03-25 16:54:24
【问题描述】:
我想知道专家对这种情况的回答:
说,我在 3 个 64MB 的块中最多有 150 MB 的文件。默认情况下,3 个映射器将启动我的 Map Reduce。
如果想增加/减少映射器的数量,命令是什么?
如果我尝试增加中间的过程会发生什么,因为我只有 3 个块要处理。一旦我开始流程,它将需要新数量的映射器或它的行为方式?
专家能否解释一下这个概念?
谢谢
【问题讨论】:
我想知道专家对这种情况的回答:
说,我在 3 个 64MB 的块中最多有 150 MB 的文件。默认情况下,3 个映射器将启动我的 Map Reduce。
如果想增加/减少映射器的数量,命令是什么?
如果我尝试增加中间的过程会发生什么,因为我只有 3 个块要处理。一旦我开始流程,它将需要新数量的映射器或它的行为方式?
专家能否解释一下这个概念?
谢谢
【问题讨论】:
这应该对你有帮助
地图数量
map 的数量通常由输入文件中的 DFS 块的数量决定。虽然这会导致人们调整他们的 DFS 块大小以调整地图的数量。地图的正确并行度水平似乎在 10-100 个地图/节点左右,尽管对于非常 cpu-light 的地图任务,我们已将其提高到 300 左右。任务设置需要一段时间,因此最好至少花费一分钟来执行地图。
实际上控制地图的数量是微妙的。 mapred.map.tasks 参数只是对 InputFormat 地图数量的提示。默认的 InputFormat 行为是将总字节数拆分为正确数量的片段。但是,在默认情况下,输入文件的 DFS 块大小被视为输入拆分的上限。可以通过 mapred.min.split.size 设置拆分大小的下限。因此,如果您期望 10TB 的输入数据和 128MB 的 DFS 块,那么您最终会得到 82k 个地图,除非您的 mapred.map.tasks 更大。最终,InputFormat 决定了地图的数量。
也可以使用 JobConf 的 conf.setNumMapTasks(int num) 手动增加映射任务的数量。这可以用来增加 map 任务的数量,但不会设置低于 Hadoop 通过拆分输入数据确定的数量。
更多详情请访问 -https://wiki.apache.org/hadoop/HowManyMapsAndReduces
我不确定你是否可以在作业执行期间这样做;这必须在工作启动之前处理
【讨论】: