关闭

hadoop源码研究-input (3)

标签: hadoop源码
555人阅读 评论(0) 收藏 举报
分类:
InputFormat,它描述了一个MapReduce Job的输入,通过InputFormat,Hadoop可以:

l           检查MapReduce输入数据的正确性;

l           将输入数据切分为逻辑块InputSplit,这些块会分配给Mapper;

l           提供一个RecordReader实现,Mapper用该实现从InputSplit中读取输入的<K,V>对。

在org.apache.hadoop.mapreduce.lib.input中,Hadoop为所有基于文件的InputFormat提供了一个虚基类FileInputFormat。下面几个参数可以用于配置FileInputFormat:

l           mapred.input.pathFilter.class:输入文件过滤器,通过过滤器的文件才会加入InputFormat;

l           mapred.min.split.size:最小的划分大小;

l           mapred.max.split.size:最大的划分大小;

l           mapred.input.dir:输入路径,用逗号做分割。

类中比较重要的方法有:

  protected List<FileStatus> listStatus(Configuration job)

递归获取输入数据目录中的所有文件(包括文件信息),输入的job是系统运行的配置Configuration,包含了上面我们提到的参数。

  public List<InputSplit> getSplits(JobContext context)

将输入划分为InputSplit,包含两个循环,第一个循环处理所有的文件,对于每一个文件,根据输入的划分最大/最小值,循环得到文件上的划分。注意,划分不会跨越文件。

FileInputFormat没有实现InputFormat的createRecordReader方法。

FileInputFormat有两个子类,SequenceFileInputFormat是Hadoop定义的一种二进制形式存放的键/值文件(参考http://hadoop.apache.org/core/docs/current/api/org/apache/hadoop/io/SequenceFile.html),它有自己定义的文件布局。由于它有特殊的扩展名,所以SequenceFileInputFormat重载了listStatus,同时,它实现了createRecordReader,返回一个SequenceFileRecordReader对象。TextInputFormat处理的是文本文件,createRecordReader返回的是LineRecordReader的实例。这两个类都没有重载FileInputFormat的getSplits方法,那么,在他们对于的RecordReader中,必须考虑FileInputFormat对输入的划分方式。

FileInputFormat的getSplits,返回的是FileSplit。这是一个很简单的类,包含的属性(文件名,起始偏移量,划分的长度和可能的目标机器)已经足以说明这个类的功能。

RecordReader用于在划分中读取<Key,Value>对。RecordReader有五个虚方法,分别是:

l           initialize:初始化,输入参数包括该Reader工作的数据划分InputSplit和Job的上下文context;

l           nextKey:得到输入的下一个Key,如果数据划分已经没有新的记录,返回空;

l           nextValue:得到Key对应的Value,必须在调用nextKey后调用;

l           getProgress:得到现在的进度;

l           close,来自java.io的Closeable接口,用于清理RecordReader。

我们以LineRecordReader为例,来分析RecordReader的构成。前面我们已经分析过FileInputFormat对文件的划分了,划分完的Split包括了文件名,起始偏移量,划分的长度。由于文件是文本文件,LineRecordReader的初始化方法initialize会创建一个基于行的读取对象LineReader(定义在org.apache.hadoop.util中,我们就不分析啦),然后跳过输入的最开始的部分(只在Split的起始偏移量不为0的情况下进行,这时最开始的部分可能是上一个Split的最后一行的一部分)。nextKey的处理很简单,它使用当前的偏移量作为Key,nextValue当然就是偏移量开始的那一行了(如果行很长,可能出现截断)。进度getProgress和close都很简单。

0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

十个值得研究的C开源项目!

原文链接:http://my.oschina.net/zhoukuo/blog/335788?p=9#comments 算是比较轻量级的开源项目,作为学习研究C语言,提升C语言功底!好处很多很多! ...
  • coding__madman
  • coding__madman
  • 2016-04-22 09:30
  • 1547

QUAKE系列引擎以及基于QUAKE扩展引擎的源代码分析

前言: 一:研究quake系列引擎断断续续也已经两年有余了,一直想写点什么,但是真的到了那一步,又发现其实很难下笔,原因有三:1 文笔不流畅,特别是技术性技巧的缺乏,概念难以精确定义,无法想内心的真实...
  • Chinamming
  • Chinamming
  • 2013-11-25 01:24
  • 1415

基于Hadoop和Openstack云存储的研究(HDFS和Swift对比)

前几天在知网上翻了好多论文,昨天开始一篇一篇地看,由于有的论文时间比较早,甚至是3年前的,所以很多部分只是对当前的技术有一个展望和综述,不过这样对我这种初学者也有好处,今天看得这篇文章是李金亮,翟永刚...
  • lanceyang1992
  • lanceyang1992
  • 2015-06-11 13:15
  • 1523

Hadoop源码篇---解读Mapprer源码Input输入

一。前述 上次分析了客户端源码,这次分析mapper源码让大家对hadoop框架有更清晰的认识 二。代码 自定义代码如下: public class MyMapper extends M...
  • LHWorldBlog
  • LHWorldBlog
  • 2018-01-09 01:33
  • 31

Hadoop RPC源码研究----客户端部分

针对之前的升级操作,研究了一下底层源码,主要是hadoop RPC相关的源码。当我们在命令行键入hdfs dfsadmin -rollingUpgrade query的时候,底层所执行的类是DFSAd...
  • SeoHyunChyL
  • SeoHyunChyL
  • 2016-09-22 17:30
  • 245

hadoop源码研究 -M/R(1)

InputFormat   将输入的数据集切割成小数据集 InputSplits, 每一个 InputSplit 将由一个 Mapper 负责处理。此外 InputFormat 中还提供一个...
  • gaokao2011
  • gaokao2011
  • 2013-12-03 10:08
  • 563

hadoop源码研究--output (5)

Map的结果,会通过partition分发到Reducer上,Reducer做完Reduce操作后,通过OutputFormat,进行输出,下面我们就来分析参与这个过程的类。 Mappe...
  • gaokao2011
  • gaokao2011
  • 2013-12-03 10:12
  • 552

block实现源码分析3-深入研究Block捕获外部变量和__block实现原理

转自:http://www.cocoachina.com/ios/20161103/17936.html 前言 Blocks是C语言的扩充功能,而Apple 在OS X S...
  • demondev
  • demondev
  • 2016-11-17 14:37
  • 281

mybatis3源码研究-构建SqlSessionFactory(一)

从mybatis3用户指南(翻译版)中我们可以看到下面这段话: 每一个 MyBatis的应用程序都以一个SqlSessionFactory对象的实例为核心。 SqlSessionFactory对象...
  • u013013102
  • u013013102
  • 2015-10-29 20:44
  • 148

Hbase源码研究(五)------put(3)

继续上面的分析,主要看提交这下 OperationStatus[] codes = region.put(putsWithLocks.toArray(new Pair[]{})); 仔细看put...
  • cuilanbo
  • cuilanbo
  • 2013-01-04 16:24
  • 736
    个人资料
    • 访问:342863次
    • 积分:3886
    • 等级:
    • 排名:第9496名
    • 原创:93篇
    • 转载:138篇
    • 译文:2篇
    • 评论:56条
    最新评论