我正在使用 hadoop 1.0.3 来运行 map reduce 作业。我有一个 3 节点集群设置。问题是我在 /conf/mapred-site.xml 中将属性 mapred.map.tasks 设置为 20,但是当我运行作业并使用以下网页访问集群信息时,hadoop 仅显示 6 个地图任务: 50030。我已经在集群中的所有节点上编辑了上述配置文件。请帮忙。
问候,莫辛
正如 miguno 所说,Hadoop 仅将 mapred.map.tasks 的值视为提示。
话虽如此,当我在使用 MapReduce 时,我能够通过指定最大计数来增加映射计数。这可能不适合你,但你可以试一试。
<property>
<name>mapred.tasktracker.map.tasks.maximum</name>
<value>60</value>
</property>
注意:此值表示地图的总数。因此,如果您希望每个 (3) 节点运行 20 个地图,则必须指定 mapred.map.tasks,如下所示:
<property>
<name>mapred.map.tasks</name>
<value>20</value>
</property>
这个问题似乎与Setting the number of map tasks 和 reduce tasks重复。
Hadoop不尊重mapred.map.tasks
它只是一个暗示。
在 Hadoop wiki 上查看此信息:
实际上控制地图的数量是微妙的。mapred.map.tasks 参数只是对 InputFormat 地图数量的提示。默认的 InputFormat 行为是将总字节数拆分为正确数量的片段。但是,在默认情况下,输入文件的 DFS 块大小被视为输入拆分的上限。可以通过 mapred.min.split.size 设置拆分大小的下限。因此,如果您期望 10TB 的输入数据和 128MB 的 DFS 块,那么您最终会得到 82k 个地图,除非您的 mapred.map.tasks 更大。最终,InputFormat 决定了地图的数量。
也就是说,Hadoop 确实接受指定的用户mapred.reduce.tasks
并且不会对其进行操作。
总之,您不能mapred.map.tasks
对给定的 MapReduce 作业强制,但您可以强制mapred.reduce.tasks
.
编辑:稍微超出您的直接问题,有一种方法可以间接强制 Hadoop 使用更多映射器。这涉及适当地设置 和mapred.min.split.size
的dfs.block.size
组合mapred.max.split.size
。请注意,输入文件的实际大小也在这里起作用。有关详细信息,请参阅此答案,该答案基本上引用了Tom White 的 Hadoop:The Definite Guide书。
它主要是决定地图任务数量的输入格式。 http://wiki.apache.org/hadoop/HowManyMapsAndReduces
对于您的问题,默认情况下,任务跟踪器运行两个 map | 同时减少任务。
要更改它,请在 /conf/mapred-site.xml 中设置属性 mapred.map.tasks.maximum
. 建议使用公式 (CPUS > 2) ?(CPUS * 0.75) : 1 设置时。