zl程序教程

您现在的位置是:首页 >  后端

当前栏目

Hadoop大数据——MR程序map任务数的规划机制

Map规划hadoop程序数据 机制 任务 MR
2023-09-14 09:02:04 时间

一个inputsplit对应一个map
而inputsplit切片规划是由InputFormat的具体实现子类来实现,就是调用
InputSplits[ ] getSplits() 方法,这个方法的逻辑可以自定义
在默认情况下,由FileInputFormat来实现,它的核心逻辑:
规划切片的大小

   long minSize = Math.max(getFormatMinSplitSize(), getMinSplitSize(job));
    long maxSize = getMaxSplitSize(job);
    public static long getMaxSplitSize(JobContext context) {
returncontext.getConfiguration().getLong(SPLIT_MAXSIZE, Long.MAX_VALUE);
      }

// mapreduce.input.fileinputformat.split.minsize  配置这个值可以让切片大小>块大小  
// mapreduce.input.fileinputformat.split.maxsize 配置这个值可以让切片大小<块大小

long splitSize = computeSplitSize(blockSize, minSize, maxSize);
//计算切片大小
protected long computeSplitSize(long blockSize, long minSize,long maxSize) {
    return Math.max(minSize, Math.min(maxSize, blockSize));
}

(2)构造切片信息对象,并放入InputSplits[ ]中

splits.add(makeSplit(path,length-bytesRemaining,splitSize,blkLocations[blkIndex].getHosts()));

注:FileInputFormat的切片机制是针对一个一个的文件进行,因此,如果文件太小,则整个文件划分为一个切片
如果一个大文件被切成若干个切片后,剩下的长度如果在blocksize的1.1倍大小以内,则将剩下的长度全部规划为一个切片