Mapreduce任务不在伪分布式hadoop中并行运行

时间:2015-04-22 17:08:19

标签: java hadoop mapreduce bigdata

我在伪分布模式下在单节点集群上使用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>

2 个答案:

答案 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