【零】Hadoop中Mapreduce的Job默认切片流程源码解析

一、解析步骤

【零】Hadoop中Mapreduce的Job默认切片流程源码解析

进入writeSplits()方法

1. writeNewSplits -> 新API切片

【零】Hadoop中Mapreduce的Job默认切片流程源码解析

进入writeNewSplits()方法

2. input -> InputFormat实例

【零】Hadoop中Mapreduce的Job默认切片流程源码解析

3. InputFormat -> 输入格式的父类

进入InputFormat 类中

【零】Hadoop中Mapreduce的Job默认切片流程源码解析

关闭InputFormat 类中

4. getSplits() -> 获取切片信息

进入getSplits()方法

【零】Hadoop中Mapreduce的Job默认切片流程源码解析

【零】Hadoop中Mapreduce的Job默认切片流程源码解析

5. isSplitable() -> 判断是否可被切分

进入isSplitable()方法

【零】Hadoop中Mapreduce的Job默认切片流程源码解析

退出isSplitable()方法

6. 获取切片大小

【零】Hadoop中Mapreduce的Job默认切片流程源码解析

7. computeSplitSize() -> 计算切片大小

进入computeSplitSize()方法

【零】Hadoop中Mapreduce的Job默认切片流程源码解析

退出computeSplitSize()方法

8. bytesRemaining -> 文件剩余长度

【零】Hadoop中Mapreduce的Job默认切片流程源码解析

9. 写入临时文件夹

【零】Hadoop中Mapreduce的Job默认切片流程源码解析

10. 小结

获取切片信息 :

  1. 选择进入新的API
  2. 获取配置信息
  3. 生成InputFormat实例
  4. 调用实例的getSplits(),获取切片信息
  5. 写入临时文件

具体切片细节:

  1. 取切片最小值和最大值
  2. 根据job信息获取所有的输入文件
  3. 获取单个文件的路径和长度
  4. 判断文件是否要被切分(文件长度大于0)
  5. 判断文件你是否可以被切分(压缩编码)
  6. 能被切分,获取切片大小(默认为块大小)
  7. 通过bytesRemaining文件长度判断文件后不够块大小的1.1倍被切分成一片
  8. 足够切成块大小的切片,不够直接成一块

11. Life

自我控制是最强者的本能。——萧伯纳

【零】Hadoop中Mapreduce的Job默认切片流程源码解析