hadoop之split

1、split 初探

InputFormat接口的getSplits方法会将文件划分切割成为若干个可序列化的split

java.lang.Object
  extended by org.apache.hadoop.mapreduce.InputFormat<K,V>
abstract  List<InputSplit> getSplits(JobContext context) 

①. split大小的计算公式

minSize=max{minSplitSize,mapred.min.split.size} (minSplitSize大小默认为1B)
maxSize=mapred.max.split.size(不在配置文件中指定时大小为Long.MAX_VALUE)

splitSize=max{minSize,min{maxSize,blockSize}}(注意,blockSize为文件在hdfs中的块大小,比如我们先配置的

dfs.block.size的值为67108864,也即64MB,然后向分布式文件系统中存入一个1GB大小的文件A,该文件在hdfs中的块大小为64MB;当我们更改dfs.block.size的值为33554432,即32MB是,此时A文件在分布式文件系统中的blockSize仍为64M,切记啊,这个就曾迷糊俺好长时间.....)mapred.min.split.size、mapred.max.split.size、blockSize均可以再配置文件中配置,前面两个在mapred-site.xml

中,最后一个可在在hdfs-site.xml中进行配置,单位均为B。


②.map数是这样计算方式

文件大小/splitSize>1.1,创建一个split0,文件剩余大小=文件大小-splitSize
   .....
剩余文件大小/splitSize<=1.1 将剩余的部分作为一个split

每一个分片对应一个map任务,这样map任务的数目也就显而易见啦。


2、split后文件的完整性

InputSplit是MapReduce对文件进行处理和运算的输入单位,只是一个逻辑概念,并不会真实切割源文件,每个InputSplit

没有对文件实际的切割,只是记录了要处理的数据的位置(包括文件的path和hosts)和长度(由start和length决定)。因此,以行记录形式的文本,还真可能存在一行记录被划分到不同的Block,甚至不同的DataNode上去。通过分析FileInputFormat里面的getSplits方法,可以得出,某一行记录同样也可能被划分到不同的InputSplit。

同理,我最近在做用hadoop做媒体的开发,一个媒体文件被切割后,如视频文件被切割后,一个视频的某个帧就可以跨越多

个block,这样切割后 处理该帧就会失败,需要另辟蹊径。


参考:

http://www.cnblogs.com/yueliming/p/3251285.html

http://blog.csdn.net/wanghai__/article/details/6583364

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值