2

我正在使用 hadoop 1.0.3 来运行 map reduce 作业。我有一个 3 节点集群设置。问题是我在 /conf/mapred-site.xml 中将属性 mapred.map.tasks 设置为 20,但是当我运行作业并使用以下网页访问集群信息时,hadoop 仅显示 6 个地图任务: 50030。我已经在集群中的所有节点上编辑了上述配置文件。请帮忙。

问候,莫辛

4

3 回答 3

4

正如 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>
于 2013-01-24T16:05:59.643 回答
3

这个问题似乎与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.sizedfs.block.size组合mapred.max.split.size。请注意,输入文件的实际大小也在这里起作用。有关详细信息,请参阅此答案,该答案基本上引用了Tom White 的 Hadoop:The Definite Guide书。

于 2013-01-24T15:43:13.103 回答
0

它主要是决定地图任务数量的输入格式。 http://wiki.apache.org/hadoop/HowManyMapsAndReduces

对于您的问题,默认情况下,任务跟踪器运行两个 map | 同时减少任务。
要更改它,请在 /conf/mapred-site.xml 中设置属性 mapred.map.tasks.maximum

. 建议使用公式 (CPUS > 2) ?(CPUS * 0.75) : 1 设置时。

于 2013-01-24T15:36:17.717 回答