在整理FairScheduler实现的task调度逻辑时,注意到EagerTaskInitializationListener类。差不多应该是job提交相关的逻辑代码中最简单清楚的一个了。
todo:标红文字表示要加前向链接,待相关文字草稿提交后。
一、概述
继承自JobInProgressListener,实现了jobAdded,jobRemoved,jobUpdated方法。哦,不能说实现,应该说继承,JobInProgressListener居然是个抽象类,看着怎么这样的listener也应该是个interface。
在该listener被注册后,就响应jobAdded,jobRemoved,jobUpdated动作。在 EagerTaskInitializationListener中,响应这三种动作来维护内部的一个job列表 (List<JobInProgress> jobInitQueue),并启动线程对job列表中的job异步的进行初始化。
二、主要代码逻辑
- 在job被添加到JobTracker时,注册的Lister会响应该方法。即当有作业提交到JobTracker时,该方法会把JIP加到jobInitQueue列表中,并且根据作业优先级和启动时间来调整其顺序。
- 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是否有作业,有则拿出来从线程池中取一个线程处理。
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是一个开源的分布式计算框架,由Apache基金会开发,主要用于处理和存储海量数据。它的核心组件包括HDFS(Hadoop Distributed File System)和MapReduce,两者构成了大数据处理的基础...
Hadoop学习笔记,自己总结的一些Hadoop学习笔记,比较简单。
Hadoop 学习笔记.md
五、Hadoop学习笔记之四:运行MapReduce作业做集成测试 集成测试是在整个系统或部分系统组合后进行的测试,对于Hadoop项目,这通常意味着在真实或模拟的Hadoop集群上运行MapReduce作业。通过集成测试,可以验证应用...
- Hive:为数据仓库设计,提供了SQL方言HiveQL,允许用户编写类似SQL的查询语句来操作Hadoop中的数据。 - Sqoop:是一个开源工具,用于在Hadoop和关系数据库之间高效地传输大量数据。 - Oozie:是一个用于管理Hadoop...
hadoop学习笔记,分天学习,原创,亲测,放心使用,没问题。
云计算,hadoop,学习笔记, dd
"Hadoop集群安装笔记" Hadoop集群安装笔记是一篇详细的安装指南,旨在帮助新手快速搭建Hadoop学习环境。以下是该笔记中的重要知识点: Hadoop集群安装目录 在安装Hadoop集群之前,需要准备好安装环境。安装环境...
Hadoop 3.x 笔记 Hadoop 是一个基于分布式存储的大数据处理框架,本文档将详细介绍 Hadoop 3.x 的配置和底层原理,从零搭建集群以及解决遇到的问题,通过图形化的方式更好地理解 Hadoop 的作用。 一、HDFS 组成 ...
1. YARN(Yet Another Resource Negotiator):资源管理系统,负责集群中资源的分配与调度,取代了早期Hadoop中的JobTracker。 2. HDFS:如前所述,是分布式文件系统。 3. MapReduce:处理数据的计算框架。 4. ...
Hadoop架构分析之集群结构分析,Hadoop架构分析之HDFS架构分析,Hadoop架构分析之NN和DN原生文档解读,Hadoop MapReduce原理之流程图.Hadoop MapReduce原理之核心类Job和ResourceManager解读.Hadoop MapReduce原理之...
Hadoop代码
这个压缩包“hadoop笔记打包下载(想学hadoop不下载后悔)”显然是一个丰富的学习资源集合,涵盖了Hadoop生态系统的多个重要组成部分。下面将详细解释这些关键知识点。 1. **Hadoop HDFS(Hadoop Distributed File ...
Hadoop中有许多特定的专业术语,了解这些术语对于理解Hadoop的工作原理至关重要。例如: - **NameNode**:HDFS中的主节点,负责管理文件系统的命名空间和客户端对文件的访问。 - **DataNode**:HDFS中的从节点,...
201806021513-刘一之--实验.docx"和"分析-201806021513-刘一之--作业.docx",我们可以推测这些文档可能包含了刘一之同学在2018年6月2日进行的Hadoop实验的详细步骤、数据分析结果以及作业解答,涵盖了实验过程中的...