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