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为一行句子。

  • 相关阅读:
    Cocos2dx for Windows Phone 8 发布
    Tiny Core Linux 4.7 发布
    走进 Google 的 Go 语言
    XCache 3.0.0 发布,PHP 性能提升方案
    Entropy Broker 2.0 发布,加密安全随机数
    Windows Phone 8 同步工具已提供,功能对比表
    PolarSSL 1.2.0 发布,SSL 加密库
    YUI 2 存在SWF漏洞,YUI 3 不受影响
    Google改进Dart并提供SDK
    Expression Blend实例中文教程(3) 布局控件快速入门Grid
  • 原文地址:https://www.cnblogs.com/jingpeng77/p/9941641.html
Copyright © 2011-2022 走看看