设为首页 收藏本站
查看: 771|回复: 0

[经验分享] hadoop文件接口FileInputFormat中split计算方法

[复制链接]

尚未签到

发表于 2016-12-12 08:14:21 | 显示全部楼层 |阅读模式
  在FileInputFormat map操作中有一块非常中的split的算法 ,
  以wordcount为例子,他到底是如果做分片的,我们如何来调优呢,
  首先我们来看下他的算法:
  在FileInputFormat    public List<InputSplit> getSplits(JobContext job)  中计算 分片大小用到的几个数据我么先来看一下:
  // 主要以来配置中的 值,缺省为 1 ;

long minSize = Math.max(getFormatMinSplitSize(), getMinSplitSize(job));

protected long getFormatMinSplitSize() {
return 1;
}
public static long getMinSplitSize(JobContext job) {
return job.getConfiguration().getLong(SPLIT_MINSIZE, 1L);
}
public static final String SPLIT_MINSIZE =
"mapreduce.input.fileinputformat.split.minsize";

  这里  mapreduce.input.fileinputformat.split.minsize 在 /mapred-default.xml 的配置主哦功能默认是 0  ,所以getMinSplitSize 返回缺省值 1 ;
  而 getFormatMinSplitSize  返回值 值也是  1;
  通过 Max之后 最后得到的值是1 ;
  这里 可以配置的 就是 split.minsize  ,所以这个值如果配置的大于1的话 ,那么 minSize  就是  配置主哦功能的split.minsize了,
  //默认使用最大值,配置了,就使用配置的值;

long maxSize = getMaxSplitSize(job);

public static long getMaxSplitSize(JobContext context) {
return context.getConfiguration().getLong(SPLIT_MAXSIZE,
Long.MAX_VALUE);
}
public static final String SPLIT_MAXSIZE =
"mapreduce.input.fileinputformat.split.maxsize";
  从代码可以看出来,缺省使用了 Long.MAX_VALUE,如果配置就是用 配置的值,
  // 在配置文件 file.blocksize  core-default.xml 默认值 给的 64*1024*1024

long blockSize = file.getBlockSize();

long splitSize = computeSplitSize(blockSize, minSize, maxSize);

  protected long computeSplitSize(long blockSize, long minSize,
long maxSize) {
return Math.max(minSize, Math.min(maxSize, blockSize));
}
  实际上是取出了  在 block中splitMax中取出一个最小值,在和分块最小值中取出 较大的一个,
  举个例子:
  加入 wordcount中使用 最小分块 为 3  ,最大分块为 10,blocksize 为默认 67108864
  ,那么最终结果为  是 10 
  但是我们在跑wordcount的时候,我们应该是都没有 设置这写参数,那么应该都是默认值:

minSize:1    maxSize:Long.MAX_VALUE-- 9223372036854775807   blocksize:67108864
  最终得到的值即:blocksize:67108864
  那么在 wordcount 如果出现块的大小刚好把一个单词截断了怎么办呢?
  待续.............
这个配置项定义了在HDFS上每个block的大小,它的值是以字节为单位。
可以在配置文件hadoop-site.xml(Hadoop 0.20 以前版本)定义,
也可以在JobConf里定义。hdfs中block size定义是以文件为粒度的。
 hadoop的mapper数基本由输入文件的block数决定,如果输入的block
size不够大,导致mapper处理时间很短(不到一分钟),大量这样的mapper
会严重降低计算性能。但是如果输入文件都是小文件,就算blocksize再大,每个
文件也会占一个block,这时候要通过合并小文件来减少mapper数,设置blocksize
是没用的。命令行设置块大小可以加参数,0.20以后的用
hadoop fs -D dfs.block.size=134217728 -put local_name remote_location
之前的可以用fs.local.block.size 参数
新版在 dfs.blocksize中设置
 

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-312921-1-1.html 上篇帖子: Hadoop环境准备(1)安装Ubuntu12.04 LTS 虚拟机 下篇帖子: Win7-64位hadoop开发环境准备_Cygwin安装
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表