在 MapReduce 框架中,InputFormat 的作用是什么?请列举几种常见的输入格式并简要说明各自的特点。
考察说明
考查对 MapReduce 输入阶段核心抽象 InputFormat 的理解及常见实现的掌握程度。
回答思路
- 【回答框架 1】InputFormat 是 MapReduce 中描述输入数据如何被切分和读取的抽象类,它主要完成两件事:一是将输入文件逻辑切分为多个 InputSplit,每个 split 对应一个 map 任务;二是提供 RecordReader 从 split 中解析出键值对供 map 函数处理。
- 【回答框架 2】常见的输入格式包括:TextInputFormat,默认格式,按行读取,键为行偏移量,值为行内容;KeyValueTextInputFormat,按分隔符将每行切分为键值对;SequenceFileInputFormat,用于读取二进制 SequenceFile,适合中间数据或压缩数据;NLineInputFormat,每个 split 包含固定行数,适合控制 map 任务数量;CombineFileInputFormat,将多个小文件合并为一个 split,减少 map 任务数,适合处理大量小文件。
- 【回答框架 3】选择输入格式时需考虑数据存储类型、是否压缩、行解析需求以及小文件优化等因素。自定义 InputFormat 时需继承 InputFormat 类并实现 getSplits 和 createRecordReader 方法。
- 【回答框架 4】InputSplit 只包含数据位置和长度等元信息,不包含数据本身,实际读取由 RecordReader 完成,这实现了逻辑切分与物理读取的解耦。
- 【关键点 1】InputFormat 负责逻辑切分输入数据为 InputSplit,并通过 RecordReader 生成键值对。
- 【关键点 2】TextInputFormat 是默认格式,键为行偏移量,值为行文本。
- 【关键点 3】SequenceFileInputFormat 适合二进制数据,CombineFileInputFormat 可优化小文件场景。
- 【关键点 4】自定义 InputFormat 需实现 getSplits 和 createRecordReader。