Hadoop权威指南: InputFormat,RecordReader,OutputFormat和RecordWriter
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的更多相关文章
- Hadoop权威指南:HDFS-Hadoop存档
Hadoop权威指南:HDFS-Hadoop存档 [TOC] 每个文件按块方式存储, 每个块的元数据存储在namenode的内存中 Hadoop存档文件或HAR文件是一个更高效的文件存档工具,它将文件 ...
- Hadoop权威指南(中文版,第2版)【分享】
下载地址 Hadoop权威指南(中文版,第2版) http://download.csdn.net/download/u011000529/5726789 (友情提示:请点击右下的 “联通下载” 或者 ...
- Hadoop权威指南学习笔记二
MapReduce简单介绍 声明:本文是本人基于Hadoop权威指南学习的一些个人理解和笔记,仅供学习參考,有什么不到之处还望指出,一起学习一起进步. 转载请注明:http://blog.csdn.n ...
- 基于python的《Hadoop权威指南》一书中气象数据下载和map reduce化数据处理及其可视化
文档内容: 1:下载<hadoop权威指南>中的气象数据 2:对下载的气象数据归档整理并读取数据 3:对气象数据进行map reduce进行处理 关键词:<Hadoop权威指南> ...
- Hadoop权威指南:MapReduce应用开发
Hadoop权威指南:MapReduce应用开发 [TOC] 一般流程 编写map函数和reduce函数 编写驱动程序运行作业 用于配置的API Hadoop中的组件是通过Hadoop自己的配置API ...
- Hadoop权威指南:通过FileSystem API读取数据
Hadoop权威指南:通过FileSystem API读取数据 [TOC] 在Hadoop中,FileSystem是一个通用的文件系统API 获取FileSystem实例的几个静态方法 public ...
- Hadoop权威指南:从Hadoop URL读取数据
[TOC] Hadoop权威指南:从Hadoop URL读取数据 使用java.net.URL对象从Hadoop文件系统读取文件 实现类似linux中cat命令的程序 文件名 HDFSCat.java ...
- Hadoop权威指南:压缩
Hadoop权威指南:压缩 [TOC] 文件压缩的两个好处: 减少储存文件所需要的磁盘空间 加速数据在网络和磁盘上的传输 压缩格式总结: 压缩格式 工具 算法 文件扩展名 是否可切分 DEFLATE ...
- Hadoop权威指南:数据完整性
Hadoop权威指南:数据完整性 [TOC] 常用的错误检测码是CRC-32(循环冗余校验) HDFS的数据完整性 HDFS会对写入的所有数据计算校验和,并在读取数据时验证校验和 datanode负责 ...
随机推荐
- ICE第二篇--一个"hello world"的简单例子
1 本文介绍一个hello world输出的例子. ice应用的步骤如下: 1. 编写 Slice 定义并编译它. 2. 编写服务器并编译它. 3. 编写客户并编译它. 基本框架图示: 本文代码图示: ...
- 中文字符 unicode转utf-8函数 python实现
unicode编码范围 00000000-0000007F的字符,用单个字节来表示: 00000080-000007FF的字符用两个字节表示 (中文的编码范围) 00000800-0000FFFF的字 ...
- DM二维码识别库DMDECODER的使用--MFC例程
DM码和QR码是当今比较主流的二维码,其中QR码容量大,容量密度为16kb,DM码容量要小一点,可在仅仅25mm²的面积上编码30个数字,但是DM码的容错率更高,所以实际的工业生产中经常使用DM码作为 ...
- CodeForces 626D Jerry's Protest
计算前两盘A赢,最后一盘B赢的情况下,B获得的球的值总和大于A获得的球总和值的概率. 存储每一对球的差值有几个,然后处理一下前缀和,暴力枚举就好了...... #include<cstdio&g ...
- label中添加图片
创建NSTextAttachment的对象,用来装在图片 将NSTextAttachment对象的image属性设置为想要使用的图片 设置NSTextAttachment对象bounds大小,也就是要 ...
- cocopods安装与使用
转自http://www.cnblogs.com/jys509/p/4839803.html Cocoapods安装步骤 1.升级Ruby环境 sudo gem update --system 如果R ...
- memcache数据组织
转自:原链接 使用命令 set(key, value) 向 memcached 插入一条数据, memcached 内部是如何组织数据呢 一 把数据组装成 item memcached 接受到客户端的 ...
- pho
PDO(PHP Data Object) 是PHP 5新出来的东西,在PHP 6都要出来的时候,PHP 6只默认使用PDO来处理数据库,将把所有的数据库扩展移到了PECL,那么默认就是没有了我们喜爱的 ...
- linux下配置ip地址四种方法(图文)
(1)Ifconfig命令 第一种使用ifconfig命令配置网卡的ip地址.此命令通常用来零时的测试用,计算机启动后 ip地址的配置将自动失效.具体用法如下.Ipconfig ethx i ...
- Nginx 在configure时的参数
Nginx 使用 Unix 下常用的 './configure && make && make install' 过程来编译安装. configure 脚本确定系统所具 ...