zoukankan      html  css  js  c++  java
  • hadoop输入格式(InputFormat)

      InputFormat接口(package org.apache.hadoop.mapreduce包中)里包括两个方法:getSplits()和createRecordReader(),这两个方法分别用来定义输入分片和读取分片的方法。 

     1 public abstract class InputFormat<K, V> {
     2 
     3   public abstract 
     4     List<InputSplit> getSplits(JobContext context
     5                                ) throws IOException, InterruptedException;
     6   
     7 
     8   public abstract 
     9     RecordReader<K,V> createRecordReader(InputSplit split,
    10                                          TaskAttemptContext context
    11                                         ) throws IOException, 
    12                                                  InterruptedException;
    13 }

      getSplits()负责将文件切分成多个分片(InputSplit),但InputSplit并没有实际切分文件,而只是说明了如何切分数据,也就是说,InputSplit只是逻辑上的切分。createRecordReader()则创建了RecordReader,用来从InputSplit读取记录。

      

      再看InputSplit类,它包括了getLength()和getLocation()两个方法。getLength()方法用来获取InputSplit的大小,getLocation()则用来获取InputSplit的位置。

    1 public abstract class InputSplit {
    2 
    3   public abstract long getLength() throws IOException, InterruptedException;
    4 
    5   public abstract 
    6     String[] getLocations() throws IOException, InterruptedException;
    7 }

      每个InputSplit对应一个map任务。作为map的输入,在逻辑上提供了这个map任务所要处理的key-value对。

      InputSplit只是定义了如何切分文件,但并没有定义如何访问它,这个工作由RecordReader来完成。RecordReader的实例是由InputFormat定义的。例如,在InputFormat的默认子类TextInputFormat中,提供了LineRecordReader。 

     1 package org.apache.hadoop.mapreduce.lib.input;
     2 
     3 public class TextInputFormat extends FileInputFormat<LongWritable, Text> {
     4 
     5   @Override
     6   public RecordReader<LongWritable, Text> 
     7     createRecordReader(InputSplit split,
     8                        TaskAttemptContext context) {
     9     return new LineRecordReader();
    10   }

      LineRecordReader会把文件的每一行作为一个单独的记录,并以行偏移为键值。这也就解释了WordCount例子中,行偏移为key值,每一行的内容作为value的原因。

      本文基于hadoop1.2.1

      如有错误,还请指正

      参考文章:《Hadoop应用开发技术详解》  刘刚

      转载请注明出处:http://www.cnblogs.com/gwgyk/p/3997734.html 

  • 相关阅读:
    Git在商业项目中的使用流程
    EventBus中观察者模式的应用
    作业三——安卓系统文件助手APP原型设计
    视频剪辑软件的调研——万兴神剪手、视频编辑王、爱剪辑
    18-10-31 Scrum Meeting 3
    myapp——自动生成小学四则运算题目的命令行程序(侯国鑫 谢嘉帆)
    一个「学渣」从零开始的Web前端自学之路
    Vue一个案例引发「内容分发slot」的最全总结
    Vue CLI 3.0脚手架如何在本地配置mock数据
    Vue一个案例引发「动画」的使用总结
  • 原文地址:https://www.cnblogs.com/gwgyk/p/3997734.html
Copyright © 2011-2022 走看看