加入收藏 | 设为首页 | 会员中心 | 我要投稿 | RSS
您当前的位置:首页 > 教程文章 > NOSQL数据库

Hadoop源代码分析(类TaskStatus)

时间:2012-04-27 01:00:06  来源:  作者:

我们先分析Task,这是一个规模比较大的类,类图如下。Task是一个虚类,它有两个子类,MapTask和ReduceTask,分别是Map任务和Reduce任务的抽象。



 

 

在分析Task相关类之前,我们来分析和ID,JobID,TaskID相关的类。

我们从TaskStatus开始来分析Task相关的类,TaskStatus,一看类名就知道它保持了Task的状态。从前面介绍MapReduce的过程中,我们了解到,MapReduce的过程可以处于下面6个阶段,它们定义在枚举:TaskStatus.Phase中,包括如下状态:

l STARTING:开始

l MAP:Map阶段

l SHUFFLE:混洗阶段

l SORT:排序阶段

l REDUCE:Reduce阶段

l CLEANUP:清理阶段

除了阶段,TaskStatus还维护任务的状态,很明显,如果不考虑异常,一次任务应该包括准备,运行和清理三个主要阶段,其实TaskStatus的正常流程和这个非常类似,同时,考虑到任务可能异常结束或被JobTracker杀死,系统还引入配合这两种异常情况的状态,其状态如下:

 

 



 

图中引入了复合状态,只是表明这些状态中包含的状态(如绿色的COMMIT_PENDING和SUCCESSED)可以转移到外面的状态(FAILED)。

(注:这张图是通过人肉逆向工程画出来的,在以后的分析过程中,这张图会根据我们对系统的深入了解而修改)

接下来我们来看TaskStatus的其它成员,它的完整类图如下,基本上是一些信息,没有复杂的操作。



它包含的主要状态信息有:taskid(对应的任务号),progress(处理情况),runState(运行状态,注意和任务阶段做区分),diagnosticInfo(诊断信息),stateString(运行状态),taskTracker(对应的taskTracker),startTime(开始时间),finishTime(结束时间),outputSize(输出大小),phase(任务阶段,注意和运行状态做区分),counters(相关的计数器),includeCounters(是否包含成员变量counters)nextRecordRange(处理的记录范围)。

TaskStatus有两个子类,分别是MapTaskStatus(没有添加任何新的成员变量)和ReduceTaskStatus。ReduceTaskStatus是Reduce任务的状态,它包含了新信息shuffleFinishTime(shuffle结束时间)和sortFinishTime(sort结束时间)。同时,获取Map结果出错时,对应的Map的TaskAttemptID会保存在failedFetchTasks中,等待上报。

最后我们看一下辅助类Counters/Counters.Counter/Counters.Group,它们保存了MapReduce过程中的一些统计计数器,Counters.Counter记录了一个计数器的<名字,显示名,值>,Counters.Group将相关的Counters.Counter聚合成组,并引入组名,组显示名。


 

来顶一下
返回首页
返回首页
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
推荐资讯
在CentOS下搭建Android 开发环境
在CentOS下搭建Androi
轻松搭建属于自己的Ubuntu发行版
轻松搭建属于自己的Ub
利用SUSE Studio 打造自己的个性化Linux发行版
利用SUSE Studio 打造
那些采用PHP技术的IT大企业
那些采用PHP技术的IT大
相关文章
    无相关信息
栏目更新
栏目热门