Hadoop之TaskInputOutputContext类
在MapReduce过程中,每一个Job都会被分成若干个task,然后再进行处理。那么Hadoop是怎么将Job分成若干个task,并对其进行跟踪处理的呢?今天我们来看一个*Context类——TaskInputOutputContext。
先来看看TaskInputOutputContext的类图:

Figure1:TaskInputOutputContext类图
从类图中可以看到,TaskInputOutputContext有3个成员变量和10个成员函数。成员变量中有一个OutputCommitter对象,一个RecordWriter对象和一个StatusReporter对象。OutputCommitter到底是做什么的呢?来看看它的类图:

Figure2:OutputCommitter类图
其实OutputCommitter类中方法以将它的功能描述得很清楚:
setupJob:Hadoop初始化时设置job的输出;
commitJob:当job完成时,清除job的输出,这个方法在反馈回来的job状态为SUCCEEDED时调用;
cleanupJob:job结束后清除job的输出;
abortJob:当job的返回状态是FAILED或KILLED时,执行该函数,用于终止作业的输出;
setupTask:设置task的输出;
needsTaskCommit:检测task是否需要提交;
commitTask:将task的输出移到作业的输出目录;
abortTask:取消task的输出;
outputCommitter类的作用就是提供Job和Task的临时文件管理功能,setupJob在系统初始化时在输出路径下创建一个临时目录,MapReduce过程中产生的临时文件会被放在这里,等Job完成后,系统会调用cleanupJob删除这个目录。
再来看看下一个类——RecordWriter。RecordWriter的功能很简单,它提供一个write方法来输出<key, value>对,一个close方法来关闭输出。它有一个对应的类——RecordReader,我们在《Hadoop -- MapReduce过程》中分析过。RecordReader将输入的数据切片并转化成<key, value>对,该<key, value>对作为Mapper的输入。
StatusReporter类我们《Hadoop -- MapReduce过程(2)》中已分析过,这里就不多讲了。
我们回到TaskInputOutputContext类上来,从类图中的方法我们可以看出,TaskInputOutputContext主要是用于获取key,value的值和输出<key, value>对。什么操作需要用到key/value呢?当然是Mapper和Reducer。因此TaskInputOutputContext是作为一个父类,被MapContext和ReduceContext继承。我们再来看看它们之间的关系:

MapContext读取输入数据并将其分片,输出<key, value>对,ReduceContext读取map输出,迭代计数,最后输出<key, value>对。
Hadoop之TaskInputOutputContext类的更多相关文章
- Hadoop之TaskAttemptContext类和TaskAttemptID类
先来看看TaskAttemptContext的类图 : Figure1:TaskAttemptContext类图 用户向Hadoop提交Job(作业),Job在JobTracker对象的控制下执行.J ...
- hadoop中Text类 与 java中String类的区别
hadoop 中 的Text类与java中的String类感觉上用法是相似的,但两者在编码格式和访问方式上还是有些差别的,要说明这个问题,首先得了解几个概念: 字符集: 是一个系统支持的所有抽象字符的 ...
- Hadoop中Writable类之四
1.定制Writable类型 Hadoop中有一套Writable实现,例如:IntWritable.Text等,但是,有时候可能并不能满足自己的需求,这个时候,就需要自己定制Writable类型. ...
- Hadoop中Writable类之三
1.BytesWritable <1>定义 ByteWritable是对二进制数据组的封装.它的序列化格式为一个用于指定后面数据字节数的整数域(4个字节),后跟字节本身. 举个例子,假如有 ...
- Hadoop中Writable类之二
1.ASCII.Unicode.UFT-8 在看Text类型的时候,里面出现了上面三种编码,先看看这三种编码: ASCII是基于拉丁字母的一套电脑编码系统.它主要用于显示现代英语和其他西欧语言.它是现 ...
- hadoop之mapper类妙用
1. Mapper类 首先 Mapper类有四个方法: (1) protected void setup(Context context) (2) Protected void map(KEYIN k ...
- Hadoop中Writable类
1.Writable简单介绍 在前面的博客中,经常出现IntWritable,ByteWritable.....光从字面上,就可以看出,给人的感觉是基本数据类型 和 序列化!在Hadoop中自带的or ...
- 琐碎-关于hadoop的GenericOptionsParser类
GenericOptionsParser 命令行解析器 是hadoop框架中解析命令行参数的基本类.它能够辨别一些标准的命令行参数,能够使应用程序轻易地指定namenode,jobtracker,以及 ...
- hadoop的两类配置文件及3种启动/关闭方式
hadoop配置文件 默认配置文件:四个模块相对应的jar包中:$HADOOP_HOME/share/hadoop *core-default.xml *hdfs-defa ...
随机推荐
- 【转】Android中Application类用法
转自:http://www.cnblogs.com/renqingping/archive/2012/10/24/Application.html Application类 Application和A ...
- qt QMessageBox QInputDialog
最近用到了QMessgaeBox和QInputDialog,QMessageBox用于提示,警告等消息,QInputDialog给用户弹出输入对话框. 参考链接 http://chenboqiang. ...
- django http 403 错误
在使用android的xUtils框架提交post请求到django服务器上面,出现错误,返回Forbiddeen.解决方法记录于此. 参考链接 http://blog.csdn.net/liangp ...
- 用JQuery给图片添加鼠标移入移出事件
$("#addLineImg").mouseover( function(){ $("#addLineImg").attr("src",&q ...
- 用MFC时,如果程序崩溃,检查内存,然后注意GDI数量,在任务管理器里选项-查看列-GDI数量
用MFC时,如果程序崩溃,检查内存,然后注意GDI数量,在任务管理器里选项-查看列-GDI数量
- channelartlist添加栏目链接
{dede:channelartlist} <a href='{dede:field name='typeurl'/}'></a> {/dede:channelartlist}
- html5头部说明
<!DOCTYPE html> <!-- 使用 HTML5 doctype,不区分大小写 --><html lang="zh-cmn-Hans"> ...
- python笔记 - day8
python笔记 - day8 参考: http://www.cnblogs.com/wupeiqi/p/4766801.html http://www.cnblogs.com/wupeiqi/art ...
- Android 回到底部和返回顶部实现
效果 准备四张图片资源 首先XML布局 我们采用FrameLayout布局 代码: <?xml version="1.0" encoding="utf-8" ...
- 分布式消息系统Kafka初步
终于可以写kafka的文章了,Mina的相关文章我已经做了索引,在我的博客中置顶了,大家可以方便的找到.从这一篇开始分布式消息系统的入门. 在我们大量使用分布式数据库.分布式计算集群的时候,是否会遇到 ...