InputFormat和RecordReader

Hadoop提出了InputFormat的概念

org.apache.hadoop.mapreduce包里的InputFormat抽象类提供了如下列代码所示的两个方法

public abstract class InputFormat<K, V> {
public abstract List<InputSplit> getSplits(JobContext context);
RecordReader<K, V> createRecordReader(InputSplit split, TaskAttemptContext context);
}

这些方法展示了InputFormat类的两个功能:

  • 将输入文件切分为map处理所需的split
  • 创建RecordReader类, 它将从一个split生成键值对序列

RecordReader类同样也是org.apache.hadoop.mapreduce包里的抽象类

public abstract class RecordReader<Key, Value> implements Closeable {
public abstract void initialize(InputSplit split, TaskAttemptContext context);
public abstract boolean nextKeyValue() throws IOException, InterruptedException;
public abstract Key getCurrentKey() throws IOException, InterruptedException;
public abstract Value getCurrentValue() throws IOException, InterruptedException;
public abstract float getProgress() throws IOException, InterruptedException;;
public abstract close() throws IOException;
}

为每个split创建一个RecordReader实例,该实例调用getNextKeyValue并返回一个布尔值

组合使用InputFormat和RecordReader可以将任何类型的输入数据转换为MapReduce所需的键值对

InputFormat

Hadoop在org.apache.hadoop.mapreduce.lib.input包里提供了一些InputFormat的实现,有如下.

  • FileInputFormat: 这是一个抽象基类,可以作为任何基于文本输入的父类
  • SequenceFileInputFormat: 这是一个高效的二进制文件格式
  • TextInputFormat: 它用于普通文本文件

InputFormat并不局限于从文件读取数据

RecordReader

Hadoop在org.apache.hadoop.mapreduce.lib.input包里也提供了一些常见的RecordReader实现

  • LineRecordReader: 这是RecordReader类对文本文件的默认实现,它将行号时为键并将该行内容视为值
  • SequenceFileRecordReader: 该类从二进制文件SequenceFile读取键值

OutputFormat和RecordWriter

org.apache.hadoop.mapreduce包里的OutputFormat和RecordWriter的子类负责共同写入作业输出

如果指定的输出路径已经存在,则会导致作业失败,如果想改变这种情况,需要一个重写该方法的OutputFormat子类.

OutputFormat

org.apache.hadoop.mapreduce.output包提供了下列OutputFormat类.

  • FileOutputFormat: 这是所有基于文件的OutputFormat的基类
  • NullOutputFormat: 这是一个虚拟类,它丢弃所有输出并对文件不做任何写入
  • SequenceFileOutputFormat: 它将输出写入二进制SequenceFile
  • TextOutputFormat: 它吧输出写入到普通文本文件

上述类把他们所需的RecordWriter定义为内部类,因此不存在单独实现的RecordWriter类

Sequence files

org.apache.hadoop.io包里的SequenceFile类提供了高效的二进制文件格式,他经常用于MapReduce作业的输出,尤其是当作业的输出被当做另一个作业的输入时.Sequence文件有如下优点.

  • 作为二进制文件,它们本质上比文本文件更为紧凑
  • 他们支持不同层面的可选压缩,也就是说,可以对每条记录或整个split进行压缩
  • 该文件可被并行切分处理

大多数二进制文件是无法被切分的,必须以单独的线性数据流形式读取,使用这种无法切分的文件作为MapReduce作业的输入,意味着需要使用一个单独的mapper处理整个文件,造成潜在的巨大性能损失

Hadoop权威指南: InputFormat,RecordReader,OutputFormat和RecordWriter的更多相关文章

  1. Hadoop权威指南:HDFS-Hadoop存档

    Hadoop权威指南:HDFS-Hadoop存档 [TOC] 每个文件按块方式存储, 每个块的元数据存储在namenode的内存中 Hadoop存档文件或HAR文件是一个更高效的文件存档工具,它将文件 ...

  2. Hadoop权威指南(中文版,第2版)【分享】

    下载地址 Hadoop权威指南(中文版,第2版) http://download.csdn.net/download/u011000529/5726789 (友情提示:请点击右下的 “联通下载” 或者 ...

  3. Hadoop权威指南学习笔记二

    MapReduce简单介绍 声明:本文是本人基于Hadoop权威指南学习的一些个人理解和笔记,仅供学习參考,有什么不到之处还望指出,一起学习一起进步. 转载请注明:http://blog.csdn.n ...

  4. 基于python的《Hadoop权威指南》一书中气象数据下载和map reduce化数据处理及其可视化

    文档内容: 1:下载<hadoop权威指南>中的气象数据 2:对下载的气象数据归档整理并读取数据 3:对气象数据进行map reduce进行处理 关键词:<Hadoop权威指南> ...

  5. Hadoop权威指南:MapReduce应用开发

    Hadoop权威指南:MapReduce应用开发 [TOC] 一般流程 编写map函数和reduce函数 编写驱动程序运行作业 用于配置的API Hadoop中的组件是通过Hadoop自己的配置API ...

  6. Hadoop权威指南:通过FileSystem API读取数据

    Hadoop权威指南:通过FileSystem API读取数据 [TOC] 在Hadoop中,FileSystem是一个通用的文件系统API 获取FileSystem实例的几个静态方法 public ...

  7. Hadoop权威指南:从Hadoop URL读取数据

    [TOC] Hadoop权威指南:从Hadoop URL读取数据 使用java.net.URL对象从Hadoop文件系统读取文件 实现类似linux中cat命令的程序 文件名 HDFSCat.java ...

  8. Hadoop权威指南:压缩

    Hadoop权威指南:压缩 [TOC] 文件压缩的两个好处: 减少储存文件所需要的磁盘空间 加速数据在网络和磁盘上的传输 压缩格式总结: 压缩格式 工具 算法 文件扩展名 是否可切分 DEFLATE ...

  9. Hadoop权威指南:数据完整性

    Hadoop权威指南:数据完整性 [TOC] 常用的错误检测码是CRC-32(循环冗余校验) HDFS的数据完整性 HDFS会对写入的所有数据计算校验和,并在读取数据时验证校验和 datanode负责 ...

随机推荐

  1. 如何用70行Java代码实现深度神经网络算法

    http://www.tuicool.com/articles/MfYjQfV 如何用70行Java代码实现深度神经网络算法 时间 2016-02-18 10:46:17  ITeye 原文  htt ...

  2. jvm内存设置及总结

    http://dmouse.iteye.com/blog/1264118 jvm内存设置及总结 博客分类: java相关 Application情况: 大量使用了内存缓存,应用负载量较大,900w/d ...

  3. UIStepper 缩放:UI的使用

    // 实现文件:声明在对应的.h文件.继承至UIViewControllor - (void)viewDidLoad { [super viewDidLoad]; // 按钮 self.stp = [ ...

  4. openstack controller ha测试环境搭建记录(十二)——配置neutron(计算节点)

    在计算节点配置内核参数:vi /etc/sysctl.confnet.ipv4.conf.all.rp_filter=0net.ipv4.conf.default.rp_filter=0 在计算节点使 ...

  5. OPENCV直方图与匹配

    直方图可以用来描述不同的参数和事物,如物体的色彩分布,物体的边缘梯度模版以及目标位置的当前假设的概率分布. 直方图就是对数据进行统计的一种方法,并且将统计值定义到一系列定义好的bin(组距)中,获得一 ...

  6. iOS开发——判断是否第一次启动

    在我们做项目的时候,判断是否是第一次启动,还是比较常用的,比如,欢迎界面,只是第一次启动需要的调查问卷等等,目的明确,方法很多,这里介绍一种简单的. 在你需要只有第一次启动才跳转的地方写上 if(![ ...

  7. ucos移植指南

    指定堆栈数据类型(宽度) typedef unsigned int OS_STK; 指定Ucos移植方法3中保存cpu状态寄存器的变量的宽度 typedef unsigned int OS_CPU_S ...

  8. VB.Net隐式转换和显式转换的方法(转)

    VB.Net隐式转换和显式转换的方法(转) “隐式转换”不需要源代码中的任何特殊语法.在下面的示例中,在将 k 的值赋给 q 之前,Visual Basic 将该值隐式转换成单精度浮点值.   Dim ...

  9. UVa 573 - The Snail

    题目大意:有一只蜗牛位于深一个深度为h米的井底,它白天向上爬u米,晚上向下滑d米,由于疲劳原因,蜗牛白天爬的高度会比上一天少f%(总是相对于第一天),如果白天爬的高度小于0,那么这天它就不再向上爬,问 ...

  10. Mongodb 导出json 和csv 格式数据

    导出到json: $ mongoexport.exe  -d TestDB -c TestCollection -o  ./test.json 导出到csv: If you want to outpu ...