有时候你可能想要用不同的方法从input data中读取数据。那么你就需要创建一个自己的InputFormat类。
 
InputFormat是一个只有两个函数的接口。
 
 public interface InputFormat<K, V> {
InputSplit[] getSplits(JobConf job, int numSplits) throws IOException;
RecordReader<K, V> getRecordReader(InputSplit split,JobConf job, Reporter reporter) throws IOException;
}
 getSplits():标记所有的输入数据,然后将他们切分为小的输入数据块,每个Map任务处理一个数据块
 getRecordReader():提供一个RecordReader来从给定的数据块中迭代处理数据,然后将数据处理为<key,value>格式
由于没有人愿意关心怎样将数据块分为小的数据块,你应该继承FileInputFormat类,它用来处理数据的分块。
大部分已知的InputFormat就是FileInputFormat的子类
InputFormat Description
TextInputFormat 输入文件中的每一行就是一个记录,Key是这一行的byte offset,而value是这一行的内容。
Key: LongWritable
Value: Text
KeyValueTextInputFormat 输入文件中每一行就是一个记录,第一个分隔符字符切分每行。在分隔符字符之前的内容为Key,在之后的 为Value。
分隔符变量通过key.value.separator.in.input.line变量设置,默认为(\t)字符。
Key: Text
Value: Text
SequenceFileInputFormat<K,V> 一个用来读取字符流数据的InputFormat,<Key,Value>为用户自定义的。字符流数据是Hadoop自定义的压缩的二进制数据格式。
它用来优化从一个MapReduce任务的输出到另一个MapReduce任务的输入之间的数据传输过程。
Key: K(用户自定义)
Value: V(用户自定义)
NLineInputFormat 与TextInputFormat一样,但每个数据块必须保证有且只有N行,mapred.line.input.format.linespermap属性,默认为1,设置为N。
Key: LongWritable
value: Text
 
FileInputFormat实现getSplits()方法,但是仍然保留getRecordReader()方法为abstract以使其子类实现。
FileInputFormat的getSplits()实现试着将输入数据分块大小限制在numSplits值之上,numSplits<数据块<hdfs block size 
FileInputFormat有一些子类可以重载的protected函数,例如isSplitable(),它用来确定你是否可以切分一个块,默认返回为true,表示只要数据块大于hdfs block size,那么它将会被切分。但有时候你不希望切分一个文件,例如某些二进制序列文件不能被切分时,你就需要重载该函数使其返回false。 
在用FileInputFormat时,你主要的精力应该集中在数据块分解为记录,并且生成<key,value>键值对的RecordReader方法上。
 
 public interface RecordReader<K, V> {
  boolean next(K key, V value) throws IOException;
  K createKey();
  V createValue();   long getPos() throws IOException;
  public void close() throws IOException;
  float getProgress() throws IOException;
}
 
 
 
 

Hadoop MapReduce InputFormat基础的更多相关文章

  1. Hadoop MapReduce InputFormat/OutputFormat

    InputFormat import java.io.IOException; import java.util.List; /** * InputFormat describes the input ...

  2. [Hadoop] - 自定义Mapreduce InputFormat&OutputFormat

    在MR程序的开发过程中,经常会遇到输入数据不是HDFS或者数据输出目的地不是HDFS的,MapReduce的设计已经考虑到这种情况,它为我们提供了两个组建,只需要我们自定义适合的InputFormat ...

  3. 从分治算法到 Hadoop MapReduce

    从分治算法说起 要说 Hadoop MapReduce 就不得不说分治算法,而分治算法其实说白了,就是四个字 分而治之 .其实就是将一个复杂的问题分解成多组相同或类似的子问题,对这些子问题再分,然后再 ...

  4. Hadoop MapReduce编程 API入门系列之网页流量版本1(二十二)

    不多说,直接上代码. 对流量原始日志进行流量统计,将不同省份的用户统计结果输出到不同文件. 代码 package zhouls.bigdata.myMapReduce.flowsum; import ...

  5. hadoop mapreduce 基础实例一记词

    mapreduce实现一个简单的单词计数的功能. 一,准备工作:eclipse 安装hadoop 插件: 下载相关版本的hadoop-eclipse-plugin-2.2.0.jar到eclipse/ ...

  6. Hadoop MapReduce编程学习

    一直在搞spark,也没时间弄hadoop,不过Hadoop基本的编程我觉得我还是要会吧,看到一篇不错的文章,不过应该应用于hadoop2.0以前,因为代码中有  conf.set("map ...

  7. 【Big Data - Hadoop - MapReduce】hadoop 学习笔记:MapReduce框架详解

    开始聊MapReduce,MapReduce是Hadoop的计算框架,我学Hadoop是从Hive开始入手,再到hdfs,当我学习hdfs时候,就感觉到hdfs和mapreduce关系的紧密.这个可能 ...

  8. MapReduce编程基础

    MapReduce编程基础 1. WordCount示例及MapReduce程序框架 2.  MapReduce程序执行流程 3.  深入学习MapReduce编程(1) 4. 参考资料及代码下载 & ...

  9. Hadoop MapReduce 一文详解MapReduce及工作机制

    @ 目录 前言-MR概述 1.Hadoop MapReduce设计思想及优缺点 设计思想 优点: 缺点: 2. Hadoop MapReduce核心思想 3.MapReduce工作机制 剖析MapRe ...

随机推荐

  1. MySql—修改权限

    MySQL 赋予用户权限命令的简单格式可概括为: grant 权限 on 数据库对象 to 用户 一.grant 普通数据用户,查询.插入.更新.删除 数据库中所有表数据的权利. grant sele ...

  2. Android 启动界面的实现(转载)

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 3 ...

  3. J2EE是什么?

    解答:从整体上讲,J2EE是使用Java技术开发企业级应用的工业标准,它是Java技术不断适应和促进企业级应用过程中的产物.适用于企业级应用的J2EE,提供一个平台独立的.可移植的.多用户的.安全的和 ...

  4. Java 的数组

    几乎所有程序设计语言都支持数组.在C和 C++里使用数组是非常危险的,因为那些数组只是内存块.若程 序访问自己内存块以外的数组,或者在初始化之前使用内存(属于常规编程错误),会产生不可预测的后果 (注 ...

  5. "回车"(carriage return)和"换行"(line feed)

    “回车”(carriage return)和“换行”(line feed)这两个概念的来历: 在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33)的玩意,每秒钟可以打10 ...

  6. Ajax.ActionLink用法

    必须要引用的JS库: <script type="text/javascript" src="@Url.StaticFile("/Assets/Conte ...

  7. 理解WCF中的Contracts

    WCF中的Contracts WCF通过Contract来说明服务和操作,一般包含五种类型的Contract:ServiceContract,OperationContract,FaultContra ...

  8. 关于Eclipse配置tomcat

    本人花了2-3天检索如何配置tomcat,终于在今天中午安装成功了!!!(本人用的是安装版) 1.首先安装tomcat 7到自己想要安装的盘(以D:\IT程序需求\Tomcat为例,且跳过JDK的安装 ...

  9. js autoComplate

    在实际的项目中,能用别人写好的插件实现相关功能是最好不过,为了节约时间成本,因为有的项目比较紧急,没充分时间让你自己来写,即便写了,你还要花大量时间调试兼容性.但是出于学习的目的,你可以利用闲暇时间, ...

  10. AutoMapper整理收集

    http://www.cnblogs.com/jobs2/p/3503990.html http://www.cnblogs.com/1-2-3/p/AutoMapper-Best-Practice. ...