Hadoop源代码分析(类TaskStatus)

转自:http://caibinbupt.iteye.com/blog/346769


我们先分析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聚合成组,并引入组名,组显示名。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值