设置hadoop任务/节点的数量

时间:2014-02-04 18:35:55

标签: java hadoop mapreduce hbase

我正在一个由我们的几个应用程序共享的集群上运行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反映“mapred.tasktracker.map.tasks.maximum = 1”,但作业仍然最终占用160个插槽。

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

任何帮助都将不胜感激。

3 个答案:

答案 0 :(得分:0)

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

  

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

答案 1 :(得分:0)

我们可以为作业指定最大和最小地图任务,但是hadoop dosent保证它的执行就像对减速器一样。 Hadoop使用最小和最大映射任务值来估计并尽力保持任务数量接近它。您应该在集群中使用类似公平调度程序的调度程序来解决您的问题。公平调度是一种为工作分配资源的方法,使得所有工作平均在一段时间内获得相等的资源份额。

答案 2 :(得分:0)

您不能限制映射器编号。

映射器编号按数据大小和块大小计算。如果数据非常大,则只能增加块大小以减少映射器编号。

因为如果限制数量,映射器将阻止等待所有其他映射器的结束。