hadoop 源码分析一

本文介绍了Hadoop中InputFormat的作用及其实现原理。InputFormat负责将输入数据集切分为若干个小的数据片段(InputSplits),每个InputSplit由一个Mapper任务处理。此外,InputFormat还提供了RecordReader接口的实现,用于将InputSplit解析为<key,value>对并传递给Map函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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对形参中的数据成员进行修改。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值