【问题标题】:Mapreduce tasks not running in parallel in pseudodistributed hadoopMapreduce 任务未在伪分布式 hadoop 中并行运行
【发布时间】:2015-04-22 17:08:19
【问题描述】:

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

【问题讨论】:

  • Hadoop 的版本?更改后您是否重新启动了 JobTracker?
  • Hadoop 版本是 2.5.2。包里的所有东西都做了,包括停止和重新启动 hadoop 的所有守护进程,但它仍然不起作用。

标签: java hadoop mapreduce bigdata


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    我认为作业所采用的输入文件的大小应该

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

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

    决定reducer 的数量需要大量信息。以下链接将为您提供帮助http://wiki.apache.org/hadoop/HowManyMapsAndReduces

    【讨论】:

      猜你喜欢
      • 2018-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-02
      • 1970-01-01
      相关资源
      最近更新 更多