【零】Hadoop中Mapreduce的Job默认切片流程源码解析
一、解析步骤
进入writeSplits()方法
1. writeNewSplits -> 新API切片
进入writeNewSplits()方法
2. input -> InputFormat实例
3. InputFormat -> 输入格式的父类
进入InputFormat 类中
关闭InputFormat 类中
4. getSplits() -> 获取切片信息
进入getSplits()方法
5. isSplitable() -> 判断是否可被切分
进入isSplitable()方法
退出isSplitable()方法
6. 获取切片大小
7. computeSplitSize() -> 计算切片大小
进入computeSplitSize()方法
退出computeSplitSize()方法
8. bytesRemaining -> 文件剩余长度
9. 写入临时文件夹
10. 小结
获取切片信息 :
- 选择进入新的API
- 获取配置信息
- 生成InputFormat实例
- 调用实例的getSplits(),获取切片信息
- 写入临时文件
具体切片细节:
- 取切片最小值和最大值
- 根据job信息获取所有的输入文件
- 获取单个文件的路径和长度
- 判断文件是否要被切分(文件长度大于0)
- 判断文件你是否可以被切分(压缩编码)
- 能被切分,获取切片大小(默认为块大小)
- 通过bytesRemaining文件长度判断文件后不够块大小的1.1倍被切分成一片
- 足够切成块大小的切片,不够直接成一块
11. Life
自我控制是最强者的本能。——萧伯纳