Hadoop数据输入输出格式

MapReduce处理的基本原则之一是将输入数据分割成块,这些快可以在多台计算机上并行处理。

FSDataInputStream类扩展了java中的DataInputStream类,以达到随机读的特性,避免了从同开始读到分片的位置,从而提高了效率。

输入格式:InputFormat类定义了如何分割和读取输入文件,其中一个子类是FileInputFormat抽象类。

当开启Hadoop作业时,FileInputFormat会得到一个路径参数,这个路径内包含了所需要处理的文件,FileInputFormat会读取这个文件夹内的所有文件(译注:默认不包括子文件夹内的),然后它会把这些文件拆分成一个或多个的InputSplit。你可以通过JobConf对象的setInputFormat()方法来设定应用到你的作业输入文件上的输入格式。下表给出了一些标准的输入格式:

输入格式

 

描述

 

键类型

 

值类型

 

TextInputFormat

 

默认格式,读取文件的行

 

行的字节偏移量 (LongWriable

 

行的内容(Text

 

KeyValueInputFormat

 

把行解析为键值对

 

第一个tab字符前的所有字符Text

 

行剩下的内容Text

 

SequenceFileInputFormat

 

Hadoop定义的高性能二进制格式

 

用户自定义

 

用户自定义

 

    数据格式类的继承关系如图:

    

Hadoop数据输入输出格式


输入块(InputSplit):一个输入块描述了构成MapReduce程序中单个map任务的一个单元。默认的大小为64M


记录读取器(RecordReader):InputSplit定义了如何切分工作,但是没有描述如何去访问它。 RecordReader类则是实际的用来加载数据并把数据转换为适合mapper读取的键值对。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/c59c80b02206e3e6da4aaf54a7f46bf2.html