我在伪分布模式下在单节点集群上使用hadoop。我的系统有16个内核,但hadoop一次只运行一个map或reduce任务,因此没有充分利用所有内核。我将conf / mapred-site.xml更改为以下内容但它仍然无法正常工作。谁能告诉我可能是什么问题及其解决方案。
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>localhost:9001</value>
</property>
<property>
<name>mapred.tasktracker.map.tasks.maximum</name>
<value>4</value>
</property>
<property>
<name>mapred.tasktracker.reduce.tasks.maximum</name>
<value>4</value>
</property>
<property>
<name>mapred.map.tasks</name>
<value>4</value>
</property>
<property>
<name>mapred.reduce.tasks</name>
<value>4</value>
</property>
</configuration>
答案 0 :(得分:0)
如果您正在分析的文件大小小于块大小(hdfs-default.xml中的dfs.blocksize
),则文件不会被拆分,并且只运行一个映射任务,尽管您有多个映射器已配置。尝试分析更大的文件或减小块大小;将创建几个拆分,以及相同数量的映射器。
答案 1 :(得分:0)
可以肯定的是,hadoop为每个输入拆分调度一个映射器。默认情况下,输入拆分大小等于dfs块大小,默认为64MB。
我认为作业所需的输入文件的大小应该是&lt; =输入分割大小。这可能是您看到为该作业准备的一个映射器的原因。
要让多个映射器处理文件,请为作业配置中的mapreduce.input.fileinputformat.split.minsize属性指定较小的值。
mapred.map.tasks属性只是输入格式的提示,不需要应用。 mapred.tasktracker.map.tasks.maximum属性仅用于提及#mappers的上限。
决定减速器的数量需要大量信息。以下链接可以帮助您http://wiki.apache.org/hadoop/HowManyMapsAndReduces