执行流程
将要处理的文件,逻辑划分为多个 split 文件,通过 LineRecordReader 按行读取内容给 map()(自定义)
读取文件
通过 FileInputFormat 读取文件
FileInputFormat是抽象类,默认使用TextInputFormat
步骤如下:
- 划分切片
- 读取文件
划分切片
通过 FileInputFormat 类的 getSplits() 方法对目录中文件进行 逻辑划分,划分几个 切片(split) 就会启动 几个 map task
默认 切片大小(split size) = block size(hdfs中默认128MB)
读取文件
逻辑划分后,调用 RecordReader 进行读取
RecordReader是抽象类,默认使用LineRecordReader
按行读取文件,每读取一行,返回一个 <key,value>
- key:每行首字符偏移量
- value:这一行的内容
调用 map() 方法
每读取一行,返回一个 <key,value>,调用一次 map() 方法(自定义的 Mapper 类)
