天天看点

MapReduce中的InputFormat(2)自定义InputFormat1 概述2 运行轨迹3 自定义InputFormat

hadoop内置的输入文件格式类有:

1)fileinputformat<k,v>这个是基本的父类,自定义就直接使用它作为父类。

2)textinputformat<longwritable,text>这个是默认的数据格式类。key代表当前行数据距离文件开始的距离,value代码当前行字符串。

3)sequencefileinputformat<k,v>这个是序列文件输入格式,使用序列文件可以提高效率,但是不利于查看结果,建议在过程中使用序列文件,最后展示可以使用可视化输出。

4)keyvaluetextinputformat<text,text>这个是读取以tab(也即是\t)分隔的数据,每行数据如果以\t分隔,那么使用这个读入,就可以自动把\t前面的当做key,后面的当做value。

5)combinefileinputformat<k,v>合并大量小数据是使用。

6)multipleinputs,多种输入,可以为每个输入指定逻辑处理的mapper。

2.1 mapper

进入context.nextkeyvalue()方法,从而进入wrappedmapper类。

2.2 wrappedmapper

进入该方法的nextkeyvalue(),从而进入mapcontextimpl类。

2.3 mapcontextimpl

现希望知道reader具体类型是什么,先看reader的申明和赋值。

此处看到是调用mapcontextimpl构造方法进行赋值的,那么继续跟进看何处调用了mapcontextimpl方法。右击mapcontextimpl > open call hierarchy。跟进一个方法叫runnewmapper可以看到,一步步看变量申明,就可以看到inputformat就是我们代码中设置的inputformat.class类型。

基于文件的fileinputformat的设计思想是:

a 由公共基类fileinputformat采用统一的方法,对文件进行切分成inputsplit(如按照统一的大小)。getsplit方法。

b 由各个派生类根据自己的需求,解析inputsplit。即各个子类实现的createrecordreader方法。那么input只需实现自定义createrecordreader方法即可。

3.1 myinputformat

3.2 myrecordreader

3.3 testformat

参考地址:http://www.cnblogs.com/hyl8218/p/5198030.html

继续阅读