我正在使用hadoop 1.0.3来运行map reduce作业。我有一个3节点集群设置。问题是我在/conf/mapred-site.xml中将属性mapred.map.tasks设置为20,但是当我运行作业并使用以下网页访问集群信息时,hadoop仅显示6个映射任务: 50030。我在集群中的所有节点上编辑了上面提到的配置文件。请帮忙。
此致 穆赫辛
答案 0 :(得分: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>
答案 1 :(得分:3)
此问题似乎与Setting the number of map tasks and reduce tasks重复。
Hadoop does not honor mapred.map.tasks
beyond considering it a hint。
请参阅此information on the Hadoop wiki:
实际控制地图的数量是微妙的。 mapred.map.tasks参数只是输入地图数量的一个提示。默认的InputFormat行为是将总字节数拆分为正确数量的片段。但是,在默认情况下,输入文件的DFS块大小被视为输入拆分的上限。可以通过mapred.min.split.size设置拆分大小的下限。因此,如果您期望10TB的输入数据并具有128MB的DFS块,那么除非mapred.map.tasks更大,否则最终会得到82k的映射。最终,InputFormat决定了地图的数量。
那就是Hadoop确实接受了用户指定的mapred.reduce.tasks
并且没有操纵它。
总之,您无法强制mapred.map.tasks
执行给定的MapReduce作业,但可以强制mapred.reduce.tasks
。
编辑:稍微超出直接问题,有一种方法可以间接强制Hadoop使用更多地图制作工具。这涉及适当地设置mapred.min.split.size
,dfs.block.size
和mapred.max.split.size
的组合。请注意,输入文件的实际大小也在此处起作用。请参阅this answer for details,它基本上引自 Tom White的Hadoop:The Definite Guide 一书。
答案 2 :(得分:0)
它主要是确定地图任务数量的输入格式。 http://wiki.apache.org/hadoop/HowManyMapsAndReduces
对于您的问题,默认情况下,任务跟踪器运行两个map |同时减少任务。
要更改它,请在/conf/mapred-site.xml中设置属性mapred.map.tasks.maximum
。建议采用公式(CPUS&gt; 2)? (CPUS * 0.75):设置时为1。