【hadoop代码笔记】Hadoop作业提交中EagerTaskInitializationListener的作用

一、概述

继承自JobInProgressListener,实现了jobAdded,jobRemoved,jobUpdated方法。哦,不能说实现,应该说继承,JobInProgressListener居然是个抽象类,看着怎么这样的listener也应该是个interface。

在该listener被注册后,就响应jobAdded,jobRemoved,jobUpdated动作。在EagerTaskInitializationListener中,响应这三种动作来维护内部的一个job列表(List<JobInProgress> jobInitQueue),并启动线程对job列表中的job异步的进行初始化。

二、主要代码逻辑

  1. 在job被添加到JobTracker时,注册的Lister会响应该方法。即当有作业提交到JobTracker时,该方法会把JIP加到jobInitQueue列表中,并且根据作业优先级和启动时间来调整其顺序。
  2. jobInitManagerThread会一直产看jobInitManagerThread列表中的job,逐一取出来初始化其task。

三、主要成员

四、主要方法

1. EagerTaskInitializationListener的jobAdded方法?:

首先关注的代码片段是该listener的jobAdded方法,前面说过,在FairScheduler的start方法中(taskTrackerManager.addJobInProgressListener(eagerInitListener))会把EagerTaskInitializationListener注册到JobTracker,在jobTracker中加入job的时候(addJob被调用),触发其上所有的jobListener的jobAdded方法。

在EagerTaskInitializationListener中,jobAdded只是简单的把job加入到一个List<JobInProgress>类型的 jobInitQueue中。并不直接对其进行初始化,对其中的job的处理由另外线程来做。

? ??2. JobInitManager类:

一个线程,对jobInitQueue上保存的每个Job启动一个线程来执行初始化工作。在其run方法中会一直检查jobInitQueue是否有作业,有则拿出来从线程池中取一个线程处理。

? ?3. InitJob

一个线程类定义,真正处理每一个job的初始化。其实调用的是job的初始化方法(JobInProgress initTasks)

?

完。

原创文章。为了维护文章的版本一致、最新、可追溯,转载请注明: 转载自idouba

本文链接地址: 【hadoop代码笔记】Hadoop作业提交中EagerTaskInitializationListener的作用


, , ,

Trackbacks/Pingbacks

  1. 【hadoop代码笔记】hadoop作业提交之汇总 | idouba - 2016年1月1日

    […] 在addJob方法中会把作业加入到集合中供调度,并会触发注册的JobInProgressListener的jobAdded事件。由上篇博文的jobtracker相关服务和功能的初始化的FairScheduler的start方法中看到,这里注册的是两个JobInProgressListener。分别是FairScheduler的内部类JobListener和EagerTaskInitializationListener。 […]

发表评论