我正在由我们的多个应用程序共享的集群上运行Hadoop作业。我们大约有40个节点和4个映射器插槽/节点。每当我的作业(仅是映射器)运行时,它将占用所有16​​0个插槽,并阻止其他作业运行。我尝试从任务代码中将作业“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反射(reflect)了“mapred.tasktracker.map.tasks.maximum = 1”,但该作业最终仍占用160个插槽。

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

任何帮助,将不胜感激。

最佳答案

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

关于java - 设置Hadoop任务/节点数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21560613/

10-13 09:10