`
甘艳丽
  • 浏览: 51632 次
  • 性别: Icon_minigender_2
  • 来自: 湖南
社区版块
存档分类
最新评论

hadoop任务调度详解

 
阅读更多
 

                                                          hadoop任务调度详解

    任何作业的运行,首先得从用户端提交作业给jobTracker开始。

 

 

 

 

 

    用户端:
         用户程序通过job类的submit方法向jobTracker提交作业,job类使用jobClient类来做一系列工作.

 

 

        (1)向jobTracker申请作业ID号。

 

 

 

 

        (2)检查作业的输出格式是否正确,比如作业的输出目录是否存在或已经存在,若输出格式不正确,会将错误信息返回给用户端的控制台。(实际我们也经常遇到这种错误,the directory already exists.)


        (3)检查输入目录是否存在。

        (4)创建job.split,job.xml文件,将这些文件放在该job对应ID号的目录下。(每个Job在hdfs上会有对应的ID的目录)

 

 

         (5)根据input format格式获得相应的input split,将input split信息写入到job.split文件中。(input split信息包括split的大小,split的内容,此split在文件的位置,以及此split在哪个datanode下。)

 

 

 

         (6)将job所需的jar包上传到hdfs上,并且将job的配置信息写入到job.xml文件中.

 

 

          (7)将job提交给jobTracker.

 

 

    JobTracker

 

 

 

       在jobTracker的构造函数中,会生成taskScheduler成员变量,该成员变量负责调度job,它默认格式是JobQueueTaskScheduler,它采用的是FIFO的调度方式,在jobTracker的offService()中调用taskScheduler.start()方法,在该start()方法中有两个监听器 ,一个是jobQueueJobInprogressListener(用于监听job的运行),一个是eagerTaskInitializationListener(用于对job的初始化),在eagerTaskInitializationListener中启动一个jobInitManagerThread线程,不断从jobInitQueue队列中得到jobInProgress对象,调用jobInprogress中的initTasks()方法完成job初始化,jobInprogress对象是在job提交给jobTracker时通过调用jobAdd()方法添加到jobInitQueue队列中的。initTasks()方法中主要实现的操作有:

 

  (1)从hdfs上读取job.split文件从而生成input splits.设定map Task的个数(也就是input splits的个数)。

 

 (2)为每个map task生成TaskInprogress对象.

            

         maps[i] = new TaskInProgress(jobId, jobFile, 
                                   splits[i], 
                                   jobtracker, conf, this, i, numSlotsPerMap);

  

(3)在将这些map task放入到nonRunningMapCache中.(当taskTracker具备运行map task环境时,直接从cache中取)。

 

(4)为每个reduce task生成TaskInprogress对象,并将其放入到nonRunningReduces中(当taskTracker具备运行reduce task环境时,直接从nonRunningReduces中取)。

 

(5)创建两个cleanup task,一个用于清理map ,一个用于清理reduce.

 

(6)创建两个setup task,一个初始化map,一个初始化reduce.

 

 

当jobTracker收到taskTracker调用heartbeat()方法后,首先会检查上一次心跳是否完成,如果一切正常,则会处理心跳。jobTracker会调用taskScheduler组装任务到任务列表中,具体实现在asignTasks()方法中,tasks = taskScheduler.assignTasks(taskTrackers.get(trackerName));得到这些任务之后,便将其封装在一些LauchTaskAction中,发回给taskTracker,让它去执行。

 

 

 

TaskTracker

taskTracker会每隔一段时间通过调用transmitHeartBeat()方法放送一次心跳给jobTracker,在transmitHeartBeat()方法中,taskTracker首先会检查目前执行task的任务以及磁盘的使用情况,

askForNewTask = 
        ((status.countOccupiedMapSlots() < maxMapSlots || (当前taskTracker运行map或reduce task的个数小于最大可运行的map 或reduce task的个数)
          status.countOccupiedReduceSlots() < maxReduceSlots) && 
         acceptNewTasks);  localMinSpaceStart = minSpaceStart;

 

如果可以接收新的任务,则将askForNewTask参数设置成true.向jobTracker发送心跳。

HeartbeatResponse heartbeatResponse = jobClient.heartbeat(status, 
                                                              justStarted,
                                                              justInited,
                                                              askForNewTask, 
                                                              heartbeatResponseId);

 

这是RPC的调用,获得hearbeatResponse信息。通过调用heartbeatResponse.getActions()获得jobTracker传过来的taskTrackerAction数组.遍历数组,看是否具有launchTaskAction,如果有则将其加入到队列中,调用addToTaskQueue,如果是map task,则放入到mapLaucher中,如果是reduce task,则放入到reduceLaucher中。taskLaucher是一个线程,它从以上队列中获得taskInprogress对象,然后调用startNewTask()方法来启动一个task.该task启动时,会将该task运行所需要的文件(job.xml,job.split,job.jar)从hdfs上拷贝到本地文件系统中。

分享到:
评论

相关推荐

    006_hadoop中MapReduce详解_3

    在Hadoop中,JobTracker负责任务的调度和监控,TaskTracker则在工作节点上执行具体的Map和Reduce任务。然而,随着Hadoop的发展,YARN(Yet Another Resource Negotiator)取代了JobTracker,提供了更高效的任务管理...

    Hadoop技术详解.Hadoop Operation

    此外,还会涉及YARN(Yet Another Resource Negotiator),它是Hadoop的资源管理系统,负责调度任务和管理集群资源。 Hadoop生态系统的其他组件如HBase、Hive、Pig、Spark等也可能在书中有所涉及。HBase是一个...

    Hadoop集群作业的调度算法

    ### Hadoop集群作业的调度算法详解 #### 一、引言 随着大数据技术的发展,Hadoop作为一款开源的大数据处理框架,在数据存储和处理方面扮演着至关重要的角色。Hadoop的核心组件之一是MapReduce,这是一种分布式计算...

    Hadoop的yarn详解

    Hadoop的YARN架构是Hadoop版本2.x引入的一个重要组件,它负责处理资源管理和作业调度,而核心的计算任务处理则交给了MapReduce、Tez、Spark等计算框架。YARN的出现是为了解决Hadoop早期版本中的可扩展性问题,它通过...

    Hadoop运行流程详解

    Hadoop运行流程详解 Hadoop是一个开源分布式计算框架,核心由两个主要组件构成:HDFS(Hadoop Distributed File System)和MapReduce。本篇将详细阐述Hadoop中的MapReduce执行流程,包括其主要概念、数据结构和整体...

    Hadoop调优之调度算法详解一

    总的来说,Hadoop调度算法是大数据处理中的核心环节,理解并掌握其原理和调优技巧,能够显著提升大数据处理的效率和效果。通过不断学习和实践,我们可以更好地驾驭Hadoop,为企业的大数据战略提供强有力的支持。

    Hadoop公平调度器指南.pdf

    ### Hadoop公平调度器知识点详解 #### 一、公平调度器概述 **公平调度器**(Fair Scheduler)是Hadoop中的一种插件式Map/Reduce调度器,它为大规模集群提供了一种有效的资源共享机制。其核心目标是确保随着时间的...

    hadoop版本差异详解.doc

    a) **YARN**:YARN(Yet Another Resource Negotiator)是新一代的资源调度器,允许Hadoop集群运行多种应用程序和框架,如MapReduce、Tez和Storm。YARN的引入打破了原本仅限于MapReduce的局限性,使得Hadoop成为一个...

    hadoop详解

    ### Hadoop 分布式存储与计算框架详解 #### 一、引言 随着互联网技术的飞速发展,数据量呈爆炸性增长趋势,传统的数据处理方法已无法满足需求。为了解决大规模数据处理的问题,Hadoop应运而生。本文将详细介绍...

    Hadoop技术详解PDF电子书下载 带书签目录

    除了核心的HDFS和MapReduce之外,Hadoop还有一系列的生态系统工具和服务,这些工具和服务扩展了Hadoop的功能,使其能够处理更多类型的数据和任务。 #### 1. YARN (Yet Another Resource Negotiator) - **概念**:...

    Hadoop应用开发详解

    MapReduce是Hadoop的计算模型,它将复杂的数据处理任务分解为“映射”和“化简”两部分,使得数据处理能够在分布式环境中并行执行,极大地提高了处理效率。 Hadoop生态系统的其他关键组件包括YARN(Yet Another ...

    详解Hadoop核心架构HDFS

    ### 详解Hadoop核心架构HDFS #### HDFS体系架构概览 Hadoop作为一个领先的开源分布式计算框架,其核心组成部分之一便是Hadoop Distributed File System(HDFS),它为大规模数据处理提供了高效、可靠且可扩展的...

    Hadoop应用开发技术详解pdf 

    在实际项目中,你可能还需要使用到如Oozie(工作流调度系统)、Ambari(Hadoop集群管理和监控工具)等工具,以优化集群管理和任务调度。同时,了解如何配置和优化Hadoop集群也是开发过程中不可忽视的部分。 阅读...

    详解Hadoop.2013

    Hadoop还包含了YARN(Yet Another Resource Negotiator),即另一种资源协调者,它是一个集群资源管理和作业调度平台。YARN允许其他数据处理框架(如Apache Spark)在Hadoop的HDFS上运行,从而实现了更高层次的抽象...

    hadoop版本差异详解.docx.doc

    YARN,全称"Yet Another Resource Negotiator",是一个通用资源管理系统,替代了原来的MapReduce v1(MRv1),使得Hadoop能够支持多种计算框架如MapReduce、Tez、Storm等,并且解决了MRv1中的资源管理和调度问题。...

    hadoop应用开发技术详解代码

    本书“Hadoop应用开发技术详解”的源代码涵盖了第3、4、5、7、8、10、11和12章的内容,为读者提供了丰富的实践示例,帮助理解并应用Hadoop生态系统中的关键组件。以下是对这些章节涉及知识点的详细解释: 1. **...

    Hadoop大数据开发与性能调优实战培训课程-Hadoop组件详解.rar

    6. Oozie:工作流调度系统,管理Hadoop生态系统中的各种作业和协调任务。 7. ZooKeeper:提供分布式协调服务,确保集群中的节点间的一致性。 课程还将涵盖如何在实际项目中集成这些组件,解决常见的问题,以及如何...

    深入云计算:Hadoop应用开发实战详解 源代码

    6. **优化与进阶**:Hadoop生态系统还包括YARN(Yet Another Resource Negotiator),用于资源管理和调度,取代了最初的JobTracker。此外,Spark、Flink等新一代大数据处理框架,提供了更高效的内存计算和流处理能力...

    hadoop海量数据处理技术详解与项目实践

    ### hadoop海量数据处理技术详解与项目实践 在当今信息化社会中,数据量呈现出爆炸式增长,如何有效地存储、处理这些海量数据成为了一个亟待解决的问题。Hadoop作为一种开源的大数据处理框架,凭借其强大的分布式...

    Hadoop 海量数据处理技术详解与项目实战

    《Hadoop海量数据处理技术详解与项目实战》一书,是专为Hadoop工程师和大数据工程师精心编撰的指南,旨在深入解析Hadoop在处理海量数据时的技术原理和实际应用。Hadoop作为开源的分布式计算框架,是大数据处理的核心...

Global site tag (gtag.js) - Google Analytics