输入格式 | key | value | |
TextInputFormat | 默认格式,读取文件的行 | 行的字节偏移量 | 行的内容 |
KeyValueInputFormat | 把行解析为键值对 | 第一个tab字符前的所有字符 | 行剩下的内容 |
SequenceFileInputFormat | Hadoop定义的高性能二进制格式 | 自定义 | 自定义 |
说明:
TextInputFormat:默认的输入格式,输入文件每一行作为单独的一个记录,但不做解析处理。这对那些没有被格式化的数据或是基于行的记录来说是很有用的,比如日志文件。
KeyValueInputFormat:也是把输入文件每一行作为单独的一个记录。然而不同的是TextInputFormat把整个文件行当做值数据,KeyValueInputFormat则是通过搜寻tab字符来把行拆分为键值对。这在把一个MapReduce的作业输出作为下一个作业的输入时显得特别有用,因为默认输出格式(下面有更详细的描述)正是按KeyValueInputFormat格式输出数据。
SequenceFileInputFormat,它会读取特殊的特定于Hadoop的二进制文件,这些文件包含了很多能让Hadoop的mapper快速读取数据的特性。Sequence文件是块压缩的并提供了对几种数据类型(不仅仅是文本类型)直接的序列化与反序列化操作。Squence文件可以作为MapReduce任务的输出数据,并且用它做一个MapReduce作业到另一个作业的中间数据是很高效的。
用法:
job.setInputFormatClass(SequenceFileInputFormat.class);
输出格式类似。