设置hadoop任务/节点的数量

e0bqpujr  于 2021-06-03  发布在  Hadoop
关注(0)|答案(3)|浏览(338)

我正在一个集群上运行一个hadoop作业,这个集群由我们的几个应用程序共享。我们有大约40个节点和4个Map器插槽/节点。每当我的作业(只不过是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 );

我有两个问题:
答。当作业运行时,job.xml会反映“mapred.tasktracker.map.tasks.maximum=1”,但作业最终仍占用160个插槽。
b。job.xml中的mapred.map.tasks不是30。这仍然是一个很大的数字(如800)。
任何帮助都将不胜感激。

nle07wnf

nle07wnf1#

我发现在将数据移动到hdfs时,最好通过设置输入文件的块大小来控制Map器的最大数量。例如,如果将块大小设置为总大小的1/30,则最终将有30个块,因此最多有30个Map任务。
hadoop fs-d fs.local.block.size=134217728-put local\u name remote\u位置

pbgvytdp

pbgvytdp2#

我们可以为job指定max和minMap任务,但是hadoop可以像为reducer那样保证它的执行。hadoop使用min和max map任务值来估计任务数,并尽最大努力使任务数接近它。您应该使用类似fair scheduler的调度器来解决您的问题。公平调度是一种将资源分配给作业的方法,使所有作业在一段时间内平均获得相等的资源份额。

a0x5cqrl

a0x5cqrl3#

不能限制Map器编号的数目。
Map器编号按数据大小和块大小计算。如果数据非常大,则只能增加块大小以减少Map器编号。
因为如果你限制这个数字,Map器会阻塞等待所有其他Map器的结束。

相关问题