`
samuschen
  • 浏览: 398488 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

hadoop 源码分析一

阅读更多

InputFormat : 将输入的数据集切割成小数据集 InputSplits, 每一个 InputSplit 将由一个 Mapper 负责处理。此外 InputFormat 中还提供一个 RecordReader 的实现 , 将一个 InputSplit 解析成 <key,value> 对提供给 map 函数。

InputSplit:继承自Writable接口,因此一个InputSplit实则包含了四个接口函数,读和写(readFields和 write),getLength能够给出这个split中所记录的数据大小,getLocations能够得到这个split位于哪些主机之上 (blkLocations[blkIndex].getHosts()),这里需要说明的是一个block要么对应一个split,要么对应多个 split,因此每个split都可以从它所属的block中获取主机信息,而且我猜测block的大小应该是split的整数倍,否则有可能一个 split跨越两个block。

RecordReader:其实这个接口主要就是为了维护一组<K,V>键值对,任何一个实现了该接口的类的构造函数都需要是 “(Configuration conf, Class< ? extends InputSplit> split)”的形式,因为一个RecordReader是有针对性的,就是针对某种split来进行的,因此必须得与某种split绑定起来。这个接口 中最重要的方法就是next,在利用next进行读取K和V时,需要先通过createKey和createValue来创建K和V的对象,然后再传给 next作为参数,使得next对形参中的数据成员进行修改。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics