Hadoop FileInputFormat getSplits() 源码解析,以及 InputFormat 作用

FileInputFormat getSplits() 源码解析
(1)找到你数据存储的目录。如果是 Local 模式,文件信息里会说明 blocksize= 32M,如果是 Yarn 模式, blocksize= 128。
(2)开始遍历处理(规划切片)目录下的每一个文件。
(3)遍历第一个文件ss.txt。
  a)获取文件大小 fs.sizeOf(ss.txt);。
  b)计算切片大小 computeSliteSize(Math.max(minSize,Math.min(maxSize,blocksize)))

          这段代码限定了 splitSize 的取值范围在 [min, maxSize] 之间;

          如果 blocksize 取值在 [min, maxSize] 之间,splitSize =blockSize= 32M或者128M;

          如果 blockSize 太小了 splitSize=minSize,或者 blockSize 太大了 splitSize=maxSize
  c)开始切片,如果文件剩余字节数 > 1.1倍splitSize ,就要切分,如果不大于1.1倍,就划分一块切片

          第1个切片:ss.txt—0:128M,第2个切片ss.txt—128:256M,第3个切片ss.txt—256M:300M

          每次切片时,都要判断剩余字节数 > 1.1倍splitSize
  d)将切片信息写到一个切片规划文件中。
  e)整个切片的核心过程在getSplit()方法中完成。
  f)数据切片只是在逻辑上对输入数据进行分片,并不会再磁盘上将其切分成分片进行存储。

          InputSplit只记录了分片的元数据信息,比如起始位置、长度以及所在的节点列表等。
  g)注意:block是HDFS上物理上存储的存储的数据,切片是对数据逻辑上的划分。
(4)提交切片规划文件到yarn上,yarn上的MrAppMaster就可以根据切片规划文件计算开启maptask个数

任何一种 inputFormat 的三大作用:

The MapReduce framework relies on the InputFormat of the job to:

  1. Validate the input-specification of the job.

  2. Split-up the input file(s) into logical InputSplit instances, each of which is then assigned to an individual Mapper.

  3. Provide the RecordReader implementation used to glean input records from the logical InputSplit for processing by the Mapper.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值