我在一个集群上运行Hadoop作业,该集群由我们的几个应用程序共享。我们大约有40个节点和4个映射器插槽/节点。每当我的作业(只有mapper)运行时,它会占用所有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 );我有两个问题:
a.当作业运行时,job.xml反映"mapred.tasktracker.map.tasks.maximum=1",但作业最终仍占用160个插槽。
b. job.xml中的mapred.map.tasks不是30。这仍然是一个很大的数字(比如800)。
任何帮助都将不胜感激。
发布于 2014-02-05 03:10:46
我发现在将数据移动到HDFS时,最好通过设置输入文件的块大小来控制映射器的最大数量。例如,如果将块大小设置为总大小的1/30,则最终将有30个块,因此最多有30个map任务。
hadoop fs -D fs.local.block.size=134217728 -put local_name remote_location
发布于 2014-02-05 07:54:04
我们可以为job指定最大和最小map任务,但hadoop不保证它的执行,就像它对reducers所做的那样。Hadoop使用最小和最大map任务值来估计,并尽最大努力使任务数量接近Hadoop应该在集群中使用像it.You这样的调度器来解决您的问题。公平调度是一种将资源分配给作业的方法,使得所有作业在一段时间内平均获得相等的资源份额。
发布于 2014-02-05 09:25:20
您不能限制映射器数量。
映射器的数量是由你的数据大小和块size.If你的数据非常大,你只能增加你的块大小来减少映射器的数量。
因为如果限制数量,映射器将阻塞等待所有其他映射器的结束。
https://stackoverflow.com/questions/21560613
复制相似问题