zoukankan      html  css  js  c++  java
  • hadoop的map函数<key,value>的来源之Inputformat

    刚接触mapreduce的编程时很是疑惑,map的<key,value>源源不断的到底是从哪里产生的,学习后才知道一切都源自main函数中的Inputformat函数,这个函数的目的就是将源数据切片,并将切片转变为<key,value>对,源源不断的供给给map,具体是Inputformat是一个抽象的接口,里面有两个函数,一个是 list<InputSplit>GetSplit()
    public abstrct class Inputformat<K,V>
    {
    public abstract
     list<InputSplit>GetSplit(,,,)

    public abstract
    ReacdorReader<K,V>createRecordReader(,,,)
    }

    这个函数的目的是将一个文件进行切片,切片的大小为一个block,这个block就对应一个map函数,所以有几个InputSplit就有几个map task,该函数并不是真的将Hdfs中的文件切片,而是逻辑切片,每个InputSplit记录的都是对应切片的长度和其实位置,等元数据信息,在看InputSplit,也是一个类,该类中有两个方法,getLength(),getLocation(),这两个函数的目的就是获取切片的长度和位置,
    public abstract class InputSplit
    {
      public abstract long getlength(,,,)

      public abstract string[] getlocation(,,)
    }
    Inputformat中的createRecordReader (,,)函数用来读取切片对应的数据,并将该数据转化为一个个的<key,value>源源不断的供给个map函数,
    由此可见InputSplit只是逻辑切分文件,真正的访问文件内容是由ReacdorReader来完成,
    ,当然我们也可以根据自己的要求来定制inputformat,自己控制文件的切分规则,FileInputformat是Inputformat默认子类,该子类有中lineRecodrReader()函数,该函数的作用就是将切片转化<key,value>其中key为行偏移,value为一行句子。

  • 相关阅读:
    cv2.imwrite()指定图片存储路径问题
    fgets读取文件最后一行重复问题
    KEAZ128 时钟配置
    MinGW x64 for Windows安装
    [python] pygame安装与配置
    S32K144之时钟配置
    C/C++ scanf和gets 区别 , printf和puts区别
    堆排序
    约瑟夫问题
    Coursera 国内无法登陆问题
  • 原文地址:https://www.cnblogs.com/jingpeng77/p/9941641.html
Copyright © 2011-2022 走看看