《MapReduce 3》--inputFormat源码解析、FileInputFormat源码解析、TextInputFormat源码解析、LineRecordReader源码解析

本文详细解析了MapReduce中的inputFormat、FileInputFormat和TextInputFormat的源码,包括inputFormat的职责、FileInputFormat的配置属性和分片逻辑,以及TextInputFormat的行记录读取。通过对这些源码的分析,读者能够深入理解MapReduce处理文件输入的内部机制。
摘要由CSDN通过智能技术生成

【inputFormat】的源码解析:

   1、inputFormat描述了mr程序的输入规则
         MapReduce框架会为每一个job设置一个输入规则:
         (1)校验输入规则:输入路径是否正确
         (2)inputFormat会将输入文件进行逻辑切分成inputSplit,
             每一个inputSplit由一个MapTask来运行。
         (3)提供了RecordReader的实现,来从inputSplit中读取输入记录,提供给map函数进行处理

            如果是基于文件进行处理,使用的通常是FileInputFormat的子类。

            根据文件大小进行切分成逻辑的 inputSplit (默认情况下splitSize与块大小一致)
            但是可以通过:mapreduce.input.fileinputformat.split.minsize来设置最小值

      
     2.两个方法解析:
   1)
          List<InputSplit> getSplits(JobContext context)
                    说明:对输入文件进行逻辑切分成inputSplit,返回多个InputSplit对象
          InputSplit对象封装的信息是:input-file-path,start,offset
          实际上:InputSplit的子类型对象默认为FileSplit.
          属性{
                  private Path file;    //文件路径
                  private long start;   //此分片要处理的数据的偏移量-相对于整个文件的偏移量
                  private long length;  //此分片要处理的原始数据的长度
                  private String[] hosts; //存储的是要处理的原始数据所在的主机名
                  private SplitLocationInfo[] hostInfos;
                 }


    2)
        RecordReader<K,V>   createRecordReader(InputSplit split,TaskAttemptContext context)
        说明:为给定的分片创建一个记录读取器。
                   框架将调用RecordReader。
                   在使用拆分之前初始化RecordReader#initialize( InputSplit, TaskAttemptContext )
      


【FileInputFormat】源码解析:

 --常量(configuration属性):
    属性1:mapreduce.input.fileinputformat.split.maxsize
           说明:分片的最大字节数
    属性2:mapreduce.input.fileinputformat.split.minsize
           说明:分片的最小字节数
    属性3:mapreduce.input.fileinputformat.input.dir.recursive
           说明:输入路径下是否递归,默认false
    属性4:mapreduce.input.fileinputformat.list-status.num-threads
           说明:统计线程数目,默认是1
    属性5:SPLIT_SLOP=1.1
           说明:分片(逻辑)相对于块大小的边界值
  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值