Hadoop之InputFormat接口的设计与实现

来源:互联网 发布:2017年淘宝双十一报名 编辑:程序博客网 时间:2024/06/05 07:47

InputFormat主要用于描述输入数据的格式,它提供以下连个功能

1.数据切分:按照某个规则策略将输入的数据切分成若干个split,以便确定Map Task的个数以及对应的split

2.为Mapper提供输入数据:给定某个split,能将其解析成一个个的key/value对

 

inputFormat包含两个方法

        InputSplit[] getSplits(JobConf job,int numSplits) throws IOException;

        RecordReader<k,v> getRecordReader(InputSplit split,JobConf job,Reporter reporter) throws IOException;

        getSplits主要完成数据的切分功能,他会将输入的数据切分成numSplits个inputSplit,inputSplit有以下两个特点

                1.逻辑切分:它至少在逻辑上切分输入的数据,并不会再磁盘上将其切分存储,InputSplit只记录切分之后分片的元数据信息,比如起始位置长度以及所在节点列表等

                 2.可序列化:在Hadoop中,对象的序列化主要有两个作用,进程间通信和永久存储。InputSplit的可序列化主要是为了进程间的通讯。作业提交到JobTracker之前,   Client会调用作业的InputFormat中的getSplits方法,并且将得到的InputSplit序列化到文件中。当JobTracker对提交上来的作业初始化的时候可以直接读取该文件,然后解析所有的InputSplit并且创建MapTask

        getRecordReader方法返回一个RecordReader对象,该对象将输入的InputSplit解析成若干个key/value对,MapReduce框架在Map Task执行过程中,会不断的调用RecordReader对象中的方法,迭代获取key/value对并交给map函数处理。

原创粉丝点击