【问题标题】:Setting the number of hadoop tasks/node设置hadoop任务/节点的数量
【发布时间】:2014-02-04 18:35:54
【问题描述】:

我正在一个由我们的多个应用程序共享的集群上运行 Hadoop 作业。我们有大约 40 个节点和 4 个映射器插槽/节点。每当我的作业(只是映射器)运行时,它会占用所有 160 个插槽并阻止其他作业运行。我尝试使用任务代码将作业“mapred.tasktracker.map.tasks.maximum=1”和“mapred.map.tasks”中的属性设置为 30(将其限制为仅 30 个节点)。

    conf.setInt ( "mapred.tasktracker.map.tasks.maximum", 1 );
    conf.setInt ( "mapred.map.tasks", 30 );
    conf.setBoolean ( "mapred.map.tasks.speculative.execution", false );

我有两个问题:

一个。当作业运行时,job.xml 反映了“mapred.tasktracker.map.tasks.maximum=1”,但作业最终仍占用 160 个插槽。

b. job.xml 中的 mapred.map.tasks 不是 30。它仍然是一个很大的数字(比如 800)。

任何帮助将不胜感激。

【问题讨论】:

    标签: java hadoop mapreduce hbase


    【解决方案1】:

    我发现在将数据移动到 HDFS 时,最好通过设置输入文件的块大小来控制映射器的最大数量。例如,如果将块大小设置为总大小的 1/30,则最终会得到 30 个块,因此最多有 30 个地图任务。

    hadoop fs -D fs.local.block.size=134217728 -put local_name remote_location

    【讨论】:

      【解决方案2】:

      我们可以为 job 指定 max 和 min map 任务,但 hadoop 保证它的执行就像它为 reducer 所做的那样。 Hadoop 使用最小和最大映射任务值来估计,并尽最大努力保持任务数量接近它。您应该在集群中使用类似公平调度程序的调度程序来解决您的问题。公平调度是一种将资源分配给作业的方法,以便所有作业平均随着时间的推移获得同等份额的资源。

      【讨论】:

        【解决方案3】:

        你可以不限制映射器的数量。

        mapper个数是由你的data size和block size来计算的。如果你的数据很大,你只能增加block size来减少mapper个数。

        因为如果你限制数量,mapper会阻塞等待所有其他mapper结束。

        【讨论】:

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