`

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

阅读更多

 

在整理FairScheduler实现的task调度逻辑时,注意到EagerTaskInitializationListener类。差不多应该是job提交相关的逻辑代码中最简单清楚的一个了。

todo:标红文字表示要加前向链接,待相关文字草稿提交后。

一、概述

继承自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   private JobInitManager jobInitManager = new JobInitManager(); //一个job初始化线程,关注job队列jobInitQueue,取出进行初始化
2   private Thread jobInitManagerThread; // JobInitManager线程
3   private List<JobInProgress> jobInitQueue = new ArrayList<JobInProgress>(); //响应lister的几种方法,维护的job队列
4   private ExecutorService threadPool; //一个线程池,里面的一个线程取一个job进行初始化
5   private int numThreads; //线程池的线程数,可配置

四、主要方法

     1. EagerTaskInitializationListener的jobAdded方法 :

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

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

  

复制代码
@Override
  public void jobAdded(JobInProgress job) {
    synchronized (jobInitQueue) {
      jobInitQueue.add(job);
      resortInitQueue();
      jobInitQueue.notifyAll();
    }

  }
复制代码

 

    2. JobInitManager类:

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

JobInitManager

   3. InitJob

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

复制代码
static class InitJob implements Runnable {
    private JobInProgress job;
    public InitJob(JobInProgress job) {
      this.job = job;
    }
    
    public void run() 
   {
      job.initTasks();            
    }
  }
复制代码

 

 完。

分享到:
评论

相关推荐

    Hadoop学习笔记

    Hadoop学习笔记,自己总结的一些Hadoop学习笔记,比较简单。

    Hadoop 学习笔记.md

    Hadoop 学习笔记.md

    3.Hadoop学习笔记.pdf

    hadoop学习笔记,hadoop简介,适用于hadoop入门,讲解hadoop安装,使用,基本原理,大数据,分布式等概念

    最新Hadoop学习笔记

    hadoop 学习笔记,从搭建环境开始到具体实验。包括hdfs配置,yarn配置,分布式配置,如何编写mapreuduce 一步一步手把手,最后项目是hadoop 与 javaweb

    linux+hadoop笔记(一)

    hadoop学习笔记,分天学习,原创,亲测,放心使用,没问题。

    云计算hadoop学习笔记

    云计算,hadoop,学习笔记, dd

    hadoop 笔记

    hadoop 笔记

    hadoop学习笔记

    我学习hadoop的笔记,并在公司做的报告,给大家共享下

    hadoop实验+作业.zip

    hadoop实验+作业hadoop实验+作业hadoop实验+作业hadoop实验+作业hadoop实验+作业hadoop实验+作业hadoop实验+作业hadoop实验+作业hadoop实验+作业

    Hadoop实战大数据大作业

    一个基于Hadoop平台进行的单词统计系统,其中包含了伪分布架构,并且包含HDFS数据存储,结合Java后台利用Mapreduce架包进行单词的统计与分析。包含了完整的实践过程,内涵源代码,以及实验命令,内容丰富,实验过程...

    Hadoop 培训笔记 及源码

    Hadoop架构分析之集群结构分析,Hadoop架构分析之HDFS架构分析,Hadoop架构分析之NN和DN原生文档解读,Hadoop MapReduce原理之流程图.Hadoop MapReduce原理之核心类Job和ResourceManager解读.Hadoop MapReduce原理之...

    Hadoop学习笔记.pdf

    Hadoop 适合初学者 Hadoop2.0 hbase 什么时候用HBase: 确信有足够多数据 确信可以不依赖所有RDBMS的额外特性(列数据类型/第二索引/事物/高级查询语言) 确信有足够硬件

    hadoop3.x笔记.docx

    大数据Hadoop的一些配置与底层原理,里面详细介绍了从0到1搭建集群以及搭建过程中遇到的问题解决方案,并且由图去更好的理解Hadoop的用处。

    Hadoop分析气象数据完整版源代码(含Hadoop的MapReduce代码和SSM框架)

    Hadoop分析气象数据完整版源代码(含Hadoop的MapReduce代码和SSM框架) 《分布式》布置了一道小作业,这是作业的所有代码,里面包含了Hadoop的MapReduce代码、和SSM框架显示数据的代码

    Hadoop学习笔记整理

    Hadoop学习笔记

    Hadoop 权威指南读书笔记

    Hadoop 权威指南读书笔记 我自己画的一张图

    Hadoop学习笔记AAAAAAAAAAA

    Hadoop学习笔记AAAAAAAAAAA

    IT十八掌_Hadoop阶段学习笔记(课堂笔记与源码流程)

    Hadoop架构分析之集群结构分析,Hadoop架构分析之HDFS架构分析,Hadoop架构分析之NN和DN原生文档解读,Hadoop MapReduce原理之流程图.Hadoop MapReduce原理之核心类Job和ResourceManager解读.Hadoop MapReduce原理之...

Global site tag (gtag.js) - Google Analytics