- 浏览: 353271 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
希恩杰:
采样器的目的是啥?使数据均匀分布到所有分区?使key的数量均匀 ...
Hadoop深入学习:Hadoop全排序中的Sampler采样器 -
lawlietwf:
三篇文章中有两篇链接地址一样,po主看下
Hadoop中的快速排序算法 -
坏小四:
...
《Hbase权威指南》深入学习hbase:表,列族,列标识,版本和cell -
fbwfbi:
发现使用pika-0.9.13的版本依然出错:Tracebac ...
RabbitMQ:使用python发布/订阅消息 -
hehu158:
centos6.5 chmod +x qq2012.tra.g ...
CentOS 6.4安装qq2012
在本节中,我们着重来学习一下MapReduce编程框架中的OutputFormat组件。
在MapReduce中,OutputFormat主要用于描述经reducer处理后输出的数据的格式,它会将用户提供的key/value键值对而写入到特定格式的文件中。
我们先看一下在1.0老版本中的OutputFormat接口的代码:
Hadoop自带了很多的OutputFormat的实现,它们与InputFormat实现县对应。这里我们就着重学习所有基于文件的OutputFormat的实现基类FileOutputFormat类。
FileOutputFormat有两个最主要的功能:
1)、实现checkOutputSpecs()方法,该方法是在作业运行之前被调用的,默认会检查用户的输出目录是否存在,如果存在则爆出异常,防止该输出目录中已有数据被覆盖。
2)、处理side-effect file,该文件并不是任务的最在中输出文件,而是具有特殊用途的专属文件,其典型应用是执行推测式任务。
在Hadoop中,有硬件或软件再或数据的原因,一个作业的某些子任务可能会慢于其他同类型的子任务,这些“慢子任务”明显会拖慢整个作业的执行进度,因此hadoop对这些慢任务实行推测式执行,即在另外一个节点上启动一个和慢子任务相同的任务——该任务就是推测式任务,最先完成的任务的计算结果后就被认为是这个数据块最终的处理结果,然后系统会杀死还没执行完的慢子任务。
为了防止两个相同的子任务同时往一个输出文件中写入数据而发生冲突,FileOutputFormat会为每一个Reduce Task的输出数据创建一个side-effect file文件,并将产生的数据临时写入该文件,然后带Reduce Task完成后,在将之移动到最终的输出目录。默认情况下,当MapReduce作业完成后,会在最终的结果目录${mapred.out.dir}下生成一个空的_SUCCESS文件,该文件主要作为一个作业完成的标志。如果使用Oozie,那么Oozie就是通过最终结果目录下的_SUCCESS文件的存在来判断作业是否执行完成的。
上述过程都是由一个叫OutputCommiter的接口实现的,Hadoop提供了默认的该接口的实现类FileOutputCommiter,当然开发者也可以根据需求来编写自己的OutputCommiter实现类,并通过${mapred.output.commiter.class}指定,下面是接口中的方法及FileOutputCommiter中的实现:
对于1.0的新版本,除了将接口变成抽象类外,还添加了一个getOutputCommitter()方法:代码如下:
在MapReduce中,OutputFormat主要用于描述经reducer处理后输出的数据的格式,它会将用户提供的key/value键值对而写入到特定格式的文件中。
我们先看一下在1.0老版本中的OutputFormat接口的代码:
public interface OutputFormat<K, V> { /** * 返回一个RercordWriter类的对象,并有该对象接收用户的key/value数据对儿,然后 * 按指定的格式将数据写入文件 * * @param ignored * @param job configuration for the job whose output is being written. * @param name the unique name for this part of the output. * @param progress mechanism for reporting progress while writing to file. * @return a {@link RecordWriter} to write the output for the job. * @throws IOException */ RecordWriter<K, V> getRecordWriter(FileSystem ignored, JobConf job, String name, Progressable progress)throws IOException; /** * 该方法一般用在用户作业被提交到JobTracker之前,由JobClient自动调用该接口来检查 * 数据目录是否合法 * * <p>This is to validate the output specification for the job when it is * a job is submitted. Typically checks that it does not already exist, * throwing an exception when it already exists, so that output is not * overwritten.</p> * * @param ignored * @param job job configuration. * @throws IOException when output should not be attempted */ void checkOutputSpecs(FileSystem ignored, JobConf job) throws IOException; }
Hadoop自带了很多的OutputFormat的实现,它们与InputFormat实现县对应。这里我们就着重学习所有基于文件的OutputFormat的实现基类FileOutputFormat类。
FileOutputFormat有两个最主要的功能:
1)、实现checkOutputSpecs()方法,该方法是在作业运行之前被调用的,默认会检查用户的输出目录是否存在,如果存在则爆出异常,防止该输出目录中已有数据被覆盖。
2)、处理side-effect file,该文件并不是任务的最在中输出文件,而是具有特殊用途的专属文件,其典型应用是执行推测式任务。
在Hadoop中,有硬件或软件再或数据的原因,一个作业的某些子任务可能会慢于其他同类型的子任务,这些“慢子任务”明显会拖慢整个作业的执行进度,因此hadoop对这些慢任务实行推测式执行,即在另外一个节点上启动一个和慢子任务相同的任务——该任务就是推测式任务,最先完成的任务的计算结果后就被认为是这个数据块最终的处理结果,然后系统会杀死还没执行完的慢子任务。
为了防止两个相同的子任务同时往一个输出文件中写入数据而发生冲突,FileOutputFormat会为每一个Reduce Task的输出数据创建一个side-effect file文件,并将产生的数据临时写入该文件,然后带Reduce Task完成后,在将之移动到最终的输出目录。默认情况下,当MapReduce作业完成后,会在最终的结果目录${mapred.out.dir}下生成一个空的_SUCCESS文件,该文件主要作为一个作业完成的标志。如果使用Oozie,那么Oozie就是通过最终结果目录下的_SUCCESS文件的存在来判断作业是否执行完成的。
上述过程都是由一个叫OutputCommiter的接口实现的,Hadoop提供了默认的该接口的实现类FileOutputCommiter,当然开发者也可以根据需求来编写自己的OutputCommiter实现类,并通过${mapred.output.commiter.class}指定,下面是接口中的方法及FileOutputCommiter中的实现:
方法 | 何时使用 | FileOutputCommiter中的实现 | setupJob | 作业初始化 | 创建临时目录${mapred.out.dir}_temorary | commitJob | 作业成功完成 | 删除临时目录,并在${mapred.out.dir}下创建空_SUCCESS文件 | abortJob | 作业运行失败 | 删除临时目录 | setupTask | 任务初始化 | 不进行任何操作 | needsTaskCommit | 判断是否要提交结果 | 只要存在side-effect file,就返回true | commitTask | 任务运行完成 | 提交结果,将side-effect file移到${mapred.out.dir}目录下 | abortTask | 任务允许失败 | 删除任务的side-effect file |
对于1.0的新版本,除了将接口变成抽象类外,还添加了一个getOutputCommitter()方法:代码如下:
public abstract class OutputFormat<K, V> { /** * 返回一个RercordWriter类的对象,并有该对象接收用户的key/value数据对儿,然后 * 按指定的格式将数据写入文件 * * @param context the information about the current task. * @return a {@link RecordWriter} to write the output for the job. * @throws IOException */ public abstract RecordWriter<K, V> getRecordWriter(TaskAttemptContext context ) throws IOException, InterruptedException; /** * 作业提交前由JobClient调用来检查输出目录是否存在,存在就报异常放在数据覆盖 * * <p>This is to validate the output specification for the job when it is * a job is submitted. Typically checks that it does not already exist, * throwing an exception when it already exists, so that output is not * overwritten.</p> * * @param context information about the job * @throws IOException when output should not be attempted */ public abstract void checkOutputSpecs(JobContext context ) throws IOException, InterruptedException; /** * Get the output committer for this output format. This is responsible * for ensuring the output is committed correctly. * @param context the task context * @return an output committer * @throws IOException * @throws InterruptedException */ public abstract OutputCommitter getOutputCommitter(TaskAttemptContext context ) throws IOException, InterruptedException; }
发表评论
-
CentOS 6.4 hadoop集成 Hbase Hive
2013-07-10 00:05 2283在之前的CentOS 5.4 hadoop集 ... -
CentOS 6.4 hadoop集成 Hbase Zookeeper
2013-07-09 22:41 2466再上一章中我们已经学习了Hadoop-1.0. ... -
CentOS 6.4 hadoop集成Hive
2013-07-09 01:58 2360在本节中,我们来学习如何安装Hive。在之前我 ... -
Hadoop深入学习:MapReduce Job中的Shuffle和sort
2013-07-06 22:30 1438... -
Hadoop深入学习:解析HDFS的写文件流程
2013-07-06 16:43 7214之前,我们 ... -
Hadoop深入学习:再谈MapReduce作业提交和执行
2013-07-03 22:00 1983在本章中,我们将来重温一下和Hadoop的作业 ... -
CentOS 6.4 安装伪分布式Hadoop 1.0.3
2013-07-02 00:52 2324在本章中学习如何在CentOS 6.4上安装配 ... -
Hadoop深入学习:Combiner
2013-07-04 00:03 10585在本节中,我们着重学习MapReduce编程模 ... -
Hadoop深入学习:MapReduce的Shuffle过程详解
2013-05-29 22:11 5141在本节中,我们再来仔细回顾一下MapRedu ... -
Hadoop深入学习:Hadoop全排序中的Sampler采样器
2013-05-28 18:27 4151在Partitioner组件的设计与实现中,我 ... -
Hadoop深入学习:ReduceTask详解
2013-05-28 16:16 1488本节我们来着重学习ReduceTask的内部操 ... -
Hadoop深入学习:MapTask详解
2013-05-28 15:23 4491在本节中 ... -
Hadoop深入学习:MapReduce中的心跳机制
2013-05-28 13:13 3138在本节中,我们特别来学习一些有心跳(Heart ... -
Hadoop深入学习:MapReduce作业提交和初始化
2013-05-27 22:24 4474之前已经学过了MapReduce接口编程模型及 ... -
Hadoop深入学习:Reduce组件详解
2013-05-27 15:59 1412在本节中我们主要来学习MapReduce编程接 ... -
Hadoop深入学习:Partitioner组件的设计与实现
2013-05-27 15:31 3392本节我们来学习MapReduce编程框架中的P ... -
Hadoop深入学习:Mapper组件详解
2013-05-26 22:29 2168本节我们主要学习MapReduce编程接口模型 ... -
Hadoop深入学习:InputFormat组件
2013-05-26 22:26 8414在本节里, ... -
Hadoop深入学习:MapReduce的序列化
2013-05-26 20:27 2102在学习MapReduce ... -
Hadoop深入学习:MapReduce的编程模型
2013-05-26 19:43 1571MapReduce的一个设计目标就是易用性,它 ...
相关推荐
Hadoop技术内幕:深入解析YARN架构设计与实现原理 高清完整中文版PDF下载
hadoop2.7汇总:新增功能最新编译64位安装、源码包、API、eclipse插件下载
Hadoop 技术内幕:深入解析Hadoop Common 和HDFS 架构设计与实现原理
Hadoop技术内幕:深入解析YARN架构设计与实现原理.pdf
Hadoop技术内幕:深入解析Hadoop Common 和HDFS 架构设计与实现原理 (大数据技术丛书) 原版书籍,非扫描版,使用kindle可以打开,也可以转换为epub使用ibooks打开
Hadoop技术内幕:深入解析YARN架构设计与实现原理.pdf
《Hadoop技术内幕:深入解析MapReduce架构设计与实现原理》内容简介:“Hadoop技术内幕”共两册,分别从源代码的角度对“Common+HDFS”和“MapReduce的架构设计和实现原理”进行了极为详细的分析。《Hadoop技术内幕:...
《Hadoop技术内幕:深入解析Hadoop Common和HDFS架构设计与实现原理》还从源代码实现中对分布式技术的精髓、分布式系统设计的优秀思想和方法,以及Java语言的编码技巧、编程规范和对设计模式的精妙运用进行了总结和...
《Hadoop技术内幕:深入解析Hadoop Common和HDFS架构设计与实现原理》由腾讯数据平台的资深Hadoop专家、X-RIME的作者亲自执笔,对Common和HDFS的源代码进行了分析,旨在为Hadoop的优化、定制和扩展提供原理性的指导。...
Hadoop技术内幕:深入解析MapReduce架构设计i与实现原理Hadoop技术内幕:深入解析MapReduce架构设计i与实现原理Hadoop技术内幕:深入解析MapReduce架构设计i与实现原理Hadoop技术内幕:深入解析MapReduce架构设计i与...
Hadoop技术内幕:深入解析MapReduce架构设计与实现原理 文字版Hadoop技术内幕:深入解析MapReduce架构设计与实现原理 文字版Hadoop技术内幕:深入解析MapReduce架构设计与实现原理 文字版
Hadoop硬实战:Hadoop in Practice
Hadoop技术内幕:深入解析YARN架构设计与实现原理 Hadoop技术内幕:深入解析YARN架构设计与实现原理
Hadoop技术内幕:深入解析YARN架构设计与实现原理(扫描版)Hadoop技术内幕:深入解析YARN架构设计与实现原理(扫描版)Hadoop技术内幕:深入解析YARN架构设计与实现原理(扫描版)
Hadoop技术内幕:深入解析MapReduce架构设计与实现原理(扫描版)Hadoop技术内幕:深入解析MapReduce架构设计与实现原理(扫描版)Hadoop技术内幕:深入解析MapReduce架构设计与实现原理(扫描版)
书籍字体清晰,欢迎各位感兴趣的人来下载。若资源积分困难户想下载,可以给我私聊下。我会适当的考虑。
《Hadoop技术内幕:深入解析MapReduce架构设计与实现原理》由Hadoop领域资深的实践者亲自执笔,首先介绍了MapReduce的设计理念和编程模型,然后从源代码的角度深入分析了RPC框架、客户端、JobTracker、TaskTracker和...
Hadoop技术内幕:深入解析MapReduce架构设计与实现原理.pdf
Hadoop技术内幕:深入解析YARN架构设计与实现原理-高清文字版.pdf