来源:《Hadoop权威指南(第2版)》
单纯摘抄
1. 几个概念
输入分片:单个map处理的输入块。
记录:每个输入分片划分为若干个记录,每条记录就是一个键/值对,map一个接一个地处理每条记录。
2. 输入分片
输入分片在JAVA中表现为InputSplit接口。
InputSplit包含一个以字节为单位的长度和一组存储位置(主机名)。其中,长度用于排序分片,以便优先处理最大的分片,从而最小化作业运行时间。存储位置供MapReduce使用,以便将Map任务尽量放在分片数据附近。
3. FileInputFormat类
FileInputFormat类提供两个功能:
1)设置作业的文件路径
2)实现作业文件的分片
- FileInputFormat只分割超过HDFS块大小的文件。
- 分片大小由一个文件分片最小的有效字节数、一个文件分片最大的有效字节数以及HDFS块的大小决定:
max(minimumSize, min(maximumSize,blockSize))
4. CombineFileInputFormat类
CombineFileInputFormat针对小文件而设计,将多个文件打包到一个分片中以便每个Mapper可以处理更多的数据,从而减少运行大量短时mapper所涉及的任务管理和启动开销。
5. 文本输入
- TextInputFormat
TextInputFormat是默认的InputFormat。
每条记录是一行输入。
键是LongWritable类型,存储该行在整个文件中的字节偏移量。
值是Text类型,是记录这一行的内容,不包括任何行终止符(换行符和回车符)。 - KeyValueTextInputFormat
- NLineInputFormat
NLineInputFormat可以设置每个mapper收到的输入行数,属性为mapred.line.input.format.linespermap。 - StreamXmlRecordReader
6. 二进制输入
- SequenceFileInputFormat
若顺序文件数据作为MapReduce的输入,使用SequenceFileInputFormat。键、值由顺序文件确定。 - SuquenceFileAsTextInputFormat
SequenceFileInputFormat的变体,将顺序文件的键、值转换为Text对象。 - SuquenceFileAsBinaryInputFormat
SequenceFileInputFormat的变体,将顺序文件的键、值转换为二进制对象。
7. 多种输入
MultipleInputs允许为每条输入路径设置InputFormat和Mapper。