JobTracker启动流程的源码级分析

org.apache.hadoop.mapred.JobTracker类是个独立的进程,有自己的main函数。JobTracker是在网络环境中提交及运行MR任务的核心位置。

main方法主要代码有两句:

//创建jobTracker对象

JobTracker tracker = startTracker(new JobConf());

//启动各个服务,包括JT内部一些重要的服务或者线程

tracker.offerService();

一、startTracker(new JobConf())根据配置文件启动JobTracker,这个方法会调用startTracker(conf, generateNewIdentifier())方法进行启动操作,generateNewIdentifier()将会返回一个以节点当前时间格式化成“yyyyMMddHHmm”的字符串。

startTracker函数是一个静态函数,它调用JobTracker的构造函数生成一个JobTracker类的实例,构造函数主要工作是对一些重要的变量进行初始化,名为result。然后,进行了一系列初始化活动,包括启动RPC server,启动内置的jetty服务器,检查是否需要重启JobTracker等。 
初始化的重要对象包括:
1、secretManager:DelegationTokenSecretManager的实例,MR安全管理相关类;
2、aclsManager:ACLsManager的实例,作业级别和队列级别的管理和访问权限控制;
3、taskScheduler:TaskScheduler的实例,调度器对象,hadoop默认的调度器是FIFO策略的JobQueueTaskScheduler;
4、interTrackerServer:Server的实例,RPC Server;
5、infoServer:HttpServer的实例,将Job、Task、TaskTracker相关信息显示到WEB前端,封装的是jetty;
6、recoveryManager:RecoveryManager的实例,作业恢复管理,即JobTracker启动时,恢复上次停止时正在运行的作业,并恢复各个任务的运行状态;recoveryManager.checkAndAddJob(status)会检查出那些作业需要恢复并放入Set<JobID> jobsToRecover; // set of jobs to be recovered,为后面的recoveryManager.recover()做准备;
7、jobHistoryServer:JobHistoryServer的实例,用于查看作业历史信息的Server;
8、dnsToSwitchMapping:DNSToSwitchMapping的实例,用于构建集群的网络拓扑结构,它能将节点地址(IP或者host)映射成网络位置。

二、 tracker.offerService()

/**
   * Run forever
   */
  public void offerService() throws InterruptedException, IOException {
    // Prepare for recovery. This is done irrespective of the status of restart
    // flag.
    while (true) {
      try {
        recoveryManager.updateRestartCount();
        break;
      } catch (IOException ioe) {
        LOG.warn("Failed to initialize recovery manager. ", ioe);
        // wait for some time
        Thread.sleep(FS_ACCESS_RETRY_PERIOD);
        LOG.warn("Retrying...");
      }
    }

    taskScheduler.start();

    //  Start the recovery after starting the scheduler
    try {
      recoveryManager.recover();
    } catch (Throwable t) {
      LOG.warn("Recovery manager crashed! Ignoring.", t);
    }
    // refresh the node list as the recovery manager might have added
    // disallowed trackers
    refreshHosts();
    //用于发现和清理死掉的TaskTracker
    this.expireTrackersThread = new Thread(this.expireTrackers,
                                          "expireTrackers");
    this.expireTrackersThread.start();
    //用于清理长时间驻留在内存中的已经运行完成的作业信息
    this.retireJobsThread = new Thread(this.retireJobs, "retireJobs");
    this.retireJobsThread.start();
    //用于发现已经被分配给某个TaskTracker但一直未汇报信息的任务
    expireLaunchingTaskThread.start();

    if (completedJobStatusStore.isActive()) {
      completedJobsStoreThread = new Thread(completedJobStatusStore,
                                            "completedjobsStore-housekeeper");
      //将已经运行完成的作业运行信息保存到HDFS上,并提供了一套存取这些信息的API。
      completedJobsStoreThread.start();
    }

    // start the inter-tracker server once the jt is ready
    this.interTrackerServer.start();

    synchronized (this) {
      state = State.RUNNING;
    }
    LOG.info("Starting RUNNING");

    this.interTrackerServer.join();
    LOG.info("Stopped interTrackerServer");
  }

返回栏目页:http://www.bianceng.cnhttp://www.bianceng.cn/webkf/tools/

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索实例
, 函数
, 运行
, jetty
, this
, 作业
, jobtracker
, 控制实例源码
Disallowed
jobtracker没有启动、hadoop启动jobtracker、jobtracker 无法启动、jobtracker 启动、mapred.job.tracker,以便于您获取更多的相关知识。

时间: 2024-10-27 13:18:26

JobTracker启动流程的源码级分析的相关文章

MapReduce job在JobTracker初始化的源码级分析

mapreduce job提交流程源码级分析(三)中已经说明用户最终调用JobTracker.submitJob方法来向JobTracker提交作业.而这个方法的核心提交方法是JobTracker.addJob(JobID jobId, JobInProgress job)方法,这个addJob方法会把Job提交到调度器(默认是JobQueueTaskScheduler)的监听器JobQueueJobInProgressListener和EagerTaskInitializationListen

android-如何在源码级合并两个独立的APK

问题描述 如何在源码级合并两个独立的APK android studio开发环境 , 两个独立的APK,各有各的启动Activity, 因功能整合需要合并到一起, 我想是把其中一个改为库, 在另外的地方启动它的界面. 请问需要怎么改? 解决方案 可以把一个添加为库的啊 在projectstructe里添加file libraray 解决方案二: 应该是添加为moudle 解决方案三: 可行方案,将附 项目 改为引用库,在主项目中引入便可. 解决方案四: 建立工程组,设置引用关系

自定义View系列教程02--onMeasure源码详尽分析

探索Android软键盘的疑难杂症 深入探讨Android异步精髓Handler 详解Android主流框架不可或缺的基石 站在源码的肩膀上全解Scroller工作机制 站在源码的肩膀上全解Scroller工作机制 Android多分辨率适配框架(1)- 核心基础 Android多分辨率适配框架(2)- 原理剖析 Android多分辨率适配框架(3)- 使用指南 自定义View系列教程00–推翻自己和过往,重学自定义View 自定义View系列教程01–常用工具介绍 自定义View系列教程02–

自定义View系列教程03--onLayout源码详尽分析

探索Android软键盘的疑难杂症 深入探讨Android异步精髓Handler 详解Android主流框架不可或缺的基石 站在源码的肩膀上全解Scroller工作机制 Android多分辨率适配框架(1)- 核心基础 Android多分辨率适配框架(2)- 原理剖析 Android多分辨率适配框架(3)- 使用指南 自定义View系列教程00–推翻自己和过往,重学自定义View 自定义View系列教程01–常用工具介绍 自定义View系列教程02–onMeasure源码详尽分析 自定义View

hadoop源码怎么分析呢

问题描述 hadoop源码怎么分析呢 本人想分析下hadoop源码,请问怎么开始分析呢,推荐书或者方法吧. 解决方案 目前市场上书推荐的话 就看看 hadoop技术内幕吧 一共三卷,其他的书 感觉不太爽,华章的书籍,算不错吧, 书中分析了源码 不过是1.0 版本的. 根据书 分析起来比较快. 学习下并发编程是很不错的,有利于自己编码能力的提高,

jQuery.prototype.init选择器构造函数源码思路分析_jquery

一.源码思路分析总结 概要: jQuery的核心思想可以简单概括为"查询和操作dom",今天主要是分析一下jQuery.prototype.init选择器构造函数,处理选择器函数中的参数: 这个函数的参数就是jQuery()===$()执行函数中的参数,可以先看我之前写的浅析jQuery基础框架一文,了解基础框架后,再看此文. 思路分析: 以下是几种jQuery的使用情况(用于查询dom),每种情况都返回一个选择器实例(习惯称jQuery对象(一个nodeList对象),该对象包含查询

开发一个Linux调试器(六):源码级逐步执行

在前几篇博文中我们学习了 DWARF 信息以及它如何使我们将机器码和上层源码联系起来.这一次我们通过为我们的调试器添加源码级逐步调试将该知识应用于实际. 系列文章索引 随着后面文章的发布,这些链接会逐渐生效. 准备环境 断点 寄存器和内存 Elves 和 dwarves 源码和信号 源码级逐步执行 源码级断点 调用栈展开 读取变量 下一步 揭秘指令级逐步执行 我们正在超越了自我.首先让我们通过用户接口揭秘指令级单步执行.我决定将它切分为能被其它部分代码利用的 single_step_instru

HDFS追本溯源:HDFS操作的逻辑流程与源码解析

本文主要介绍5个典型的HDFS流程,这些流程充分体现了HDFS实体间IPC接口和stream接口之间的配合. 1. Client和NN       Client到NN有大量的元数据操作,比如修改文件名,在给定目录下创建一个子目录,这些操作一般只涉及Client和NN的交互,通过IPC调用ClientProtocol进行.创建子目录的逻辑流程如下图:       从图中可见,创建子目录这种操作并没有涉及DN.因为元数据会被NN持久化到edits中,因此在持久化结束之后,这个调用就会被成功返回.复习

Javac源码简单分析之Javac简单介绍

一.简单介绍 javac 是java语言编程编译器.javac工具读由java语言编写的类和接口的定义,并将它们编译成字节代码的class文件. 二.源码获取 OpenJDK6源码:http://download.java.net/openjdk/jdk6/ Javac的源码就在OpenJDK源码里面. 或者在CSDN下载:http://download.csdn.net/detail/p_3er/7383741 三.Javac的包 Javac的公共入口点是com.sun.tools.javac