maptask的并行度决定map阶段的任务处理并发数量。进而影响到整个job的处理速度。maptask的并行度是不是越多越好?并行度又是如何决定的?
先说maptask的并行度是如何决定的.
一个job的map阶段的并行度由客户端提交job时决定。而客户端对map阶段并行度规划的逻辑为:将待处理的数据进行逻辑切片(即按照一个特定切片的大小,将待处理的数据划分为多个split),然后每一个spilt分配给一个maptask并行实例处理。
切片逻辑:
1)若一个文件大小小于一个切片的大小。当做一个切片处理。
2)若一个文件大小大于一个切片,将拆分成多个切片,取模剩下的也会当做一个切片。
怎样确定切片的大小?
跟设置切片大小参数有关,块的大小有关
mapreduce.input.fileinputformat.split.maxsize
mapreduce.input.fileinputformat.split.minsize
max(minsize,min(blocksize,maxsize))
每个map的执行时间至少一分钟
因为在MRappMaster在调度maptask或reducetask都会花费个几秒钟,如果map执行时间过短,那么会花掉很多时间在调度少。造成资源的浪费。