IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    MapReduce文件切分个数计算方法

    Crazyant发表于 2014-02-27 07:45:56
    love 0

    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

    您可能也喜欢:

    文件下载代码-来自PBDigg

    Python批量重命名文件的方法

    php判断远程文件或网站是否能打开

    php函数-计算两个日期相差多少天

    PHP对文件的操作总结
    无觅


沪ICP备19023445号-2号
友情链接