Hadoop源码分析1 MapReduce的输入

1. 输入格式InputFormat

    InputFormat作为Hadoop作业的所有输入格式的抽象基类,描述了作业的输入需要满足的规范细节。该抽象类内部定义了如下两个抽象方法:
  public abstract List<InputSplit> getSplits(JobContext context) throws IOException, InterruptedException;
该方法的主要作用就是将所有的输入文件分割成逻辑上的多个分片InputSplit。这分片仅仅是逻辑上的,并不是真正的将文件分割成多个数据块。每个InputSplit通过输入文件路径、开始位置和偏移量三个信息来唯一的标识。
  public abstract RecordReader<K,V> createRecordReader(InputSplit split,TaskAttemptContext context) throws IOException,InterruptedException;
该方法的主要作用就是为指定的InputSplit创建记录读取器,通过创建的记录读取器从输入分片中读取键值对,然后将键值对交给Map来处理。

  FileInputFormat:InputFormat的直接子类之一
FileInputFormat类也是一个抽象类,它是所有不同类型的文件的输入格式的基类。在该类中,它只提供了对于InputFormat的getSplit抽象方法的实现。它没有提供createRecordReader的实现是因为不同格式的文件的读取策略是不同的。
FileInputFormat所在的包为org.apache.hadoop.mapreduce.lib.input中,具体的getSplit方法的实现可以去这个包中查看。

  TextInputFormat:FileInputFormat抽象类的默认实现
该类主要重写了FileInputFormat中的createRecordReader和isSplit方法。
createRecordReader的实现是通过创建LineRecordReader行记录读取器,该读取器用于从文件中读取一行,并将行的偏移量作为键,行的文本内容作为值。

2. 输入分片InputSplit

    InputSplit是一个单独的Map要处理的数据单元。输入分片的数据类型一般都是字节型。输入分片经过相应的RecordReader处理后,转化成记录视图的形式,然后交给Map处理。一般一条记录以一个键值对的形式展现。

3. 记录读取器 RecordReader
    抽象基类RecordReader所在的包为org.apache.hadoop.mapreduce。该类中包含6个抽象方法:
  public abstract void initialize(InputSplit split,TaskAttemptContext context) throws....;初始化方法,该方法只会在初始化时执行一次;
  public abstract boolean nextKeyValue() throws...;取得分片中的下一个键值对,如果读取到就返回true,否则返回false;
  public abstract KEYIN getCurrentKey() throws...;取得当前读取到的键值对中的键对象;
  public abstract VALUEIN getCurrentValue() throws...;取得当前读取到的键值对中的值对象;
  public abstract float getProgress() throws...;取得当前数据读取的进度,该方法会返回一个0.0到1.0之间的浮点数;
  public abstract void close() throws...;主要用于关闭recordreader,从而清理掉它所占用的资源。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、下4载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、下4载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、 4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值