Heim >Datenbank >MySQL-Tutorial >MapReduce文件切分个数计算方法

MapReduce文件切分个数计算方法

WBOY
WBOYOriginal
2016-06-07 16:33:491157Durchsuche

Hadoop的MapReduce计算的第一个阶段是InputFormat处理的,先将文件进行切分,然后将每个切分传递给每个Map任务来执行,本文阐述切分个数,也就是Map任务数目的计算方法; Hadoop首先会计算每个切分的大小,然后使用文件总大小/每个切分的大小来决定划分的总

Hadoop的MapReduce计算的第一个阶段是InputFormat处理的,先将文件进行切分,然后将每个切分传递给每个Map任务来执行,本文阐述切分个数,也就是Map任务数目的计算方法;

Hadoop首先会计算每个切分的大小,然后使用”文件总大小/每个切分的大小“来决定划分的总数,如果不足一个切分的大小,则当做1个;

在org.apache.hadoop.mapred.FileInputFormat中给出了计算每个划分大小的方法:

  protected long computeSplitSize(long goalSize, long minSize,
                                       long blockSize) {
    return Math.max(minSize, Math.min(goalSize, blockSize));
  }

其中几个变量的解释如下:

  • blockSize:HDFS存储的基本单元,默认为64MB或者128MB;
  • minSize:由用户设置的最小切分大小,配置项为mapred.min.split.size;
  • goalSize:计算公式为"文件总大小/用户设定的Map任务个数",即用户间接期望的大小;

由此可以推断出选定策略:

  • 划分大小为blockSize:blockSize小于用户期望的大小,比用户设定的最小值要大;也就是说如果用户设定的最小值太小的话,会使用block size作为划分大小
  • 划分大小为goalSize:用户设定了Map的任务数目,那么即使算出来的划分大小比block size小也会使用,这个时候出现了两个用户设定值:最小值和期望值,hadoop会选择两者中大的那个;
  • 划分大小为minSize:如果用户期望的值,还有blocksize只都比用户设定的最小值要小,那么就会使用这个最小值;

针对这几个值,用户可以根据输入数据的情况,合理的设置mapred.min.split.size和map.tasks.size来实现优化,InputSplit和blockSize相同是非常好的一种方法,因为不需要拆分block了.

文章地址:http://www.crazyant.net/1423.html

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn