您的位置:首页 > 运维架构

Hadoop之InputFormat接口的设计与实现

2013-06-13 16:53 309 查看
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函数处理。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: