hdfs中InputFormat的职责

职责1:对数据进行切片,然后jobClient就会向HDFS提交切片信息

职责2:map端通过其获得对应的RecordReader去读取切片


它是一个接口,只定义了两个方法。

InputSplit[] getSplits(JobConf job, int numSplits) throws IOException;
RecordReader<K, V> getRecordReader(InputSplit split, JobConf job, Reporter reporter) throws IOException;
InputFormat有多个实现类,例如FileInputFormat,CombineFileInputFormat...
他们实现了不同的数据切片策略,对应着不同的InputFormat的实现和RecordReader实现。

InputSplit也只有两个接口函数:
long getLength() throws IOException;
String[] getLocations() throws IOException;
只有这两个函数的原因是对于任务调配只需要关心其位置与长度。至于如何读取
不同的InputFormat对应不同的实现,如FileInputFormat对应的FileSplit就有如下
的信息:
  private Path file;      // Split所在的文件
  private long start;     // Split的起始位置
  private long length;    // Split的长度,getLength()会返回它
  private String[] hosts; // Split所在的机器名称,getLocations()会返回它
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值