推荐答案
MapReduce 的输入格式 (InputFormat) 主要有以下几种:
- TextInputFormat:默认的输入格式,将输入文件的每一行作为一个记录,键是行的偏移量,值是行的内容。
- KeyValueTextInputFormat:将输入文件的每一行作为一个记录,键和值由分隔符(默认是制表符)分隔。
- SequenceFileInputFormat:用于读取 SequenceFile 格式的文件,键和值由用户定义。
- NLineInputFormat:将输入文件的每 N 行作为一个记录,键是行的偏移量,值是行的内容。
- CombineFileInputFormat:用于将多个小文件合并为一个输入分片,减少 Map 任务的数量。
- DBInputFormat:用于从数据库中读取数据,键和值由用户定义。
- FileInputFormat:所有文件输入格式的基类,用户可以通过继承该类自定义输入格式。
本题详细解读
TextInputFormat
- 特点:TextInputFormat 是 MapReduce 的默认输入格式,适用于处理文本文件。
- 键值对:键是行的偏移量(LongWritable 类型),值是行的内容(Text 类型)。
- 适用场景:适用于处理纯文本文件,如日志文件、CSV 文件等。
KeyValueTextInputFormat
- 特点:KeyValueTextInputFormat 将输入文件的每一行作为一个记录,键和值由分隔符分隔。
- 键值对:键和值都是 Text 类型,分隔符默认是制表符,可以通过配置修改。
- 适用场景:适用于处理键值对格式的文本文件,如配置文件、键值对数据等。
SequenceFileInputFormat
- 特点:SequenceFileInputFormat 用于读取 SequenceFile 格式的文件,SequenceFile 是 Hadoop 提供的一种二进制文件格式。
- 键值对:键和值由用户定义,可以是任意 Writable 类型。
- 适用场景:适用于处理二进制数据,如中间计算结果、序列化对象等。
NLineInputFormat
- 特点:NLineInputFormat 将输入文件的每 N 行作为一个记录,键是行的偏移量,值是行的内容。
- 键值对:键是行的偏移量(LongWritable 类型),值是行的内容(Text 类型)。
- 适用场景:适用于需要将多行作为一个记录处理的场景,如处理多行日志、多行文本等。
CombineFileInputFormat
- 特点:CombineFileInputFormat 用于将多个小文件合并为一个输入分片,减少 Map 任务的数量。
- 键值对:键和值由用户定义,可以是任意 Writable 类型。
- 适用场景:适用于处理大量小文件的场景,如日志文件、小文本文件等。
DBInputFormat
- 特点:DBInputFormat 用于从数据库中读取数据,键和值由用户定义。
- 键值对:键和值由用户定义,可以是任意 Writable 类型。
- 适用场景:适用于从关系型数据库中读取数据,如 MySQL、PostgreSQL 等。
FileInputFormat
- 特点:FileInputFormat 是所有文件输入格式的基类,用户可以通过继承该类自定义输入格式。
- 键值对:键和值由用户定义,可以是任意 Writable 类型。
- 适用场景:适用于需要自定义输入格式的场景,如处理特定格式的文件、自定义数据源等。
通过了解这些输入格式,开发者可以根据具体的数据处理需求选择合适的输入格式,从而提高 MapReduce 作业的效率和灵活性。