`

hadoop 源码分析(四)JobTracker 添加job 到schduler 队列中

阅读更多
  启动 JobTracker
1. 进入main方法:
   
 //执行startTracker 方法
      JobTracker tracker = startTracker(new JobConf());
     //执行offerService()方法
      tracker.offerService();

3.startTracker()方法中
       
 // new JobTracker 方法
          result = new JobTracker(conf, identifier);
        result.taskScheduler.setTaskTrackerManager(result);


2. JobTracker()构造方法中初始化信息
     (1) static constants 变量
     (2) 加载调度器 默认为FIFO 调度
      /
/ Create the scheduler
          Class<? extends TaskScheduler> schedulerClass
          = conf.getClass("mapred.jobtracker.taskScheduler",
          JobQueueTaskScheduler.class, TaskScheduler.class);
taskScheduler=(TaskScheduler)ReflectionUtils.newInstance(schedulerClass, conf);

taskScheduler 默认的执行类为JobQueueTaskScheduler ,当启动JobTracker 的时候 调用了 tracker.offerService();该方法执行了父类的 start()方法.该start()方法为 JobQueueTaskScheduler 的start方法:
       
  @Override
          public synchronized void start() throws IOException {
           super.start();
taskTrackerManager.addJobInProgressListener(jobQueueJobInProgressListener);
eagerTaskInitializationListener.setTaskTrackerManager(taskTrackerManager);
           eagerTaskInitializationListener.start();
           taskTrackerManager.addJobInProgressListener(
           eagerTaskInitializationListener);
  }

在这个方法中调用了addJobInProgressListener()将lister 加入到了 jobTracker中,这个过程很绕,可通过下面的流程图梳理清楚

3. 启动jettyServer
infoServer.addServlet("reducegraph", "/taskgraph", TaskGraphServlet.class);
infoServer.start();


  JobTracker 提交job
1. jobClient()通过代理 调用JobTracker的submit方法提交job
2. submitJob方法中 调用了 addJob()将job添加到job队列中,等待执行
3. addJob方法:
   
 private synchronized JobStatus addJob(JobID jobId, JobInProgress job) 
     throws IOException {
    totalSubmissions++;

    synchronized (jobs) {
      synchronized (taskScheduler) {
        jobs.put(job.getProfile().getJobID(), job);
       // jobInProgressListeners list 在start jobTracker 的时候,在JobQueueTaskScheduler 的start方法中初始化加入了两个listener :
       eagerTaskInitializationListener 和jobQueueJobInProgressListener 
        for (JobInProgressListener listener : jobInProgressListeners) {
          listener.jobAdded(job);
        }
      }
    }
    myInstrumentation.submitJob(job.getJobConf(), jobId);
    job.getQueueMetrics().submitJob(job.getJobConf(), jobId);

    LOG.info("Job " + jobId + " added successfully for user '" 
             + job.getJobConf().getUser() + "' to queue '" 
             + job.getJobConf().getQueueName() + "'");
    AuditLogger.logSuccess(job.getUser(), 
        Operation.SUBMIT_JOB.name(), jobId.toString());
    return job.getStatus();
  }



  • 大小: 28.8 KB
21
2
分享到:
评论

相关推荐

    Hadoop多Job并行处理的实例详解

    `waitForCompletion(true)`会阻塞直到Job完成,而`submit()`方法则是异步的,它立即返回并将Job添加到队列等待执行。为了跟踪Job的状态,我们使用`isComplete()`检查每个Job是否已经完成: ```java boolean bln1 = ...

    Hadoop运行流程详解

    - 作业调度:JobTracker接收到作业后,将其加入作业队列,并根据数据分布情况和资源状况创建MapTask和ReduceTask。 - 任务分配:TaskTracker定期通过RPC向JobTracker发送心跳,表明自己可执行任务。JobTracker根据...

    大数据技术分享 Hadoop运行原理分析 共3页.pdf

    ### 大数据技术分享:Hadoop运行原理分析 #### 一、概论 Hadoop作为一个开源框架,主要用于处理大规模的数据集。它通过提供一个高效、可靠、可扩展的基础架构来支持分布式数据处理任务。Hadoop的核心组件包括HDFS...

    Hadoop 权限管理.pdf

    本文将详细介绍Hadoop中的权限管理机制,包括服务级别授权(Service Level Authorization)、作业队列访问控制(Access Control on Job Queues)以及文件系统权限控制(DFS Permission)。 #### 二、服务级别授权...

    Hadoop 2.0部署配置文件示例.zip

    1. YARN(Yet Another Resource Negotiator):Hadoop 2.0引入了YARN作为新的资源管理框架,取代了原有的JobTracker,使得集群资源分配和任务调度更加高效和灵活。 2. HDFS HA(High Availability):为了解决...

    Apache Hadoop技术参考手册.docx

    Apache Hadoop 是一个开源框架,专门用于处理和存储大规模数据集。这个技术参考手册深入剖析了Hadoop的核心组件,包括YARN(Yet Another Resource Negotiator)、MapReduce以及Hadoop分布式文件系统(HDFS)。让我们...

    hadoop命令指南

    - `-libjars &lt;comma-separated list of jars&gt;`:指定一系列JAR文件以逗号分隔,这些JAR文件将被添加到类路径中。同样,此选项也仅适用于`job`命令。 - `-archives &lt;comma-separated list of archives&gt;`:指定一系列...

    我的面试题

    6. **JobTracker 初始化作业**:一旦有可用资源,`JobTracker` 会将作业从队列中取出并进行初始化。它会读取 HDFS 上的 `job.split` 文件,并根据 split 信息进行任务分配等操作。 7. **TaskTracker 获取 Task**:`...

    hadoop配置含义

    - **JobTracker**:主要负责调度任务到 TaskTracker 上执行,并监控任务状态。 - **TaskTracker**:负责执行 Map 和 Reduce 任务,并将结果返回给 JobTracker。 #### 2. 配置文件 Hadoop 的配置通过以下两个主要...

    my document

    在 Hadoop 1.x 版本中,Job 的提交流程主要包括以下几个关键步骤: 1. **启动 JobClient 实例**:MapReduce 程序通过 `runJob()` 方法启动一个 `JobClient` 实例。 2. **获取 Job ID**:`JobClient` 通过调用 `...

    Hadoop MapReduce 入门

    - **提交作业**: 通过 JobClient 提交作业,JobTracker 会进行一系列操作,包括检查输入输出路径的有效性、将 job 的 jar 文件复制到 HDFS 等。 ##### 3.3 作业初始化 - **作业调度**: JobTracker 将作业加入队列,...

    mapreduce编程说明和程序流程

    - 用户提交一个Job到Hadoop集群,JobTracker(在YARN中为ResourceManager)会分配TaskTracker(YARN中的NodeManager)来执行Map和Reduce任务。 - JobTracker监控作业进度,重新调度失败的任务,并协调数据的交换。...

    Yarn的工作机制.pptx

    YARN的工作机制是Hadoop 2.x版本引入的重大改进,旨在解决早期Hadoop 1.x中MapReduce模型的局限性,尤其是单一JobTracker的性能瓶颈问题。以下是对YARN工作机制的详细解析: 1. **应用程序提交**:当一个MapReduce...

    haboop 配置文件

    在Hadoop中,例如,`mapreduce.job.counters.max`可以限制任务计数器的数量,而这些计数器在内部可能使用哈希表实现以提高查找效率。另外,网络连接池可能也使用哈希表来存储和管理连接,以优化性能和减少资源消耗。...

    JobTrackerAPI

    例如,在Hadoop生态系统中,JobTracker(已被ResourceManager取代)就是这样的角色,负责管理和调度MapReduce任务。 总之,JobTrackerAPI是实现分布式任务管理和调度的关键组件,通过C#实现,可以充分利用.NET框架...

Global site tag (gtag.js) - Google Analytics