您的位置:首页 > 运维架构

如何在Hadoop中控制Map&Reduce任务的数量

2017-11-18 10:29 1296 查看
一 如何控制Map任务数量

既然要讨论如何控制map任务数量,那么我们就得知道有哪些因素会影响map任务的数量。

 

我们知道,map任务的数量是由在提交job的时候,进行文件切片的时候,文件的切片数决定的。

 

在这个时候,无论你是否在配置文件设置mapreduce.job.maps参数,都将会重新设置这个值为文件的切片数。

 

而这个文件切片数又是由splitSize决定的。如果一个splitSize=20M,那么100M的文件就会生成5个切片。

 

那么splitSize又是由什么决定的呢?

intsplitSize = computeSplitSize():

具体逻辑就是:

maxSize:mapreduce.input.fileinputformat.split.maxsize,默认值是Integer.MAX_VALUE

minSize:mapreduce.input.fileinputformat.split.minsize,默认值是1

如果min(maxSize,blockSize)取其中最小的,假设结果为result

然后在max(minSize,result)取中较大者。

所以默认情况下,splitSize就是blockSize=128M

策略如下:

#如果希望调小maptask, 那么你需要调大minSize,至少保证minSize> blockSize(128M)

#如果希望调大maptask,那么你需要调小maxSize,至少保证maxSize< blockSize(128M)

#如果有很多小文件,你又想减少map任务,这时候我觉得你可以使用CombineInputFormat将多个文件组装成一个CombineInputSplit。

 

二 调整reduce数量

Reduce的数量是由mapreduce.job.reduces这个参数决定的,你也可以在job.
setNumReduceTasks

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: