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



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

如果您正在分析的文件大小小于块大小(在 hdfs-default.xml 中dfs.blocksize),则文件不会拆分,并且只运行一个映射任务,尽管您配置了映射器的数量。尝试分析更大的文件或减小块大小;将创建多个拆分,以及相同数量的映射器。

可以肯定的是,Hadoop为每个输入拆分调度一个映射器。默认情况下,输入拆分大小等于 dfs 块大小,默认为 64MB。

我相信作业采用的输入文件的大小应该<=输入拆分大小。这可能是您看到一个映射器为这项工作做好准备的原因。

若要让多个映射器来处理文件,请在作业配置中为 mapreduce.input.fileinputformat.split.minsize 属性分配较小的值。

mapred.map.tasks 属性只是输入格式的提示,不需要应用。mapred.tasktracker.map.tasks.maximum 属性仅用于提及 # 映射器的上限。

确定减速器的数量需要大量信息。以下链接将帮助您 http://wiki.apache.org/hadoop/HowManyMapsAndReduces

最新更新