Hadoop 学习笔记四--JobTracker 的执行过程

Hadoop中MapReduce 的执行也是采用Master/Slave 主从结构的方式。其中JobTracker 充当了Master的角色,而TaskTracker 充当了Slave 的角色。Master负责接受客户端提交的Job,然后调度Job的每一个子任务Task运行于Slave上,并监控它们。如果发现所有失败的Task就重新运行它,slave则负责直接执行每一个Task。

当Hadoop启动的时候,JobTracker 是作为单独的一个JVM来运行的。JobTracker 会一直等待JobClient通过RPC来提交作业,它调度处理JobClient提交的每一个任务,并监控它们的运行。当发现有失败的任务的时候,JobTracker会重新执行它。而且 TaskTracker 会一直向JobTracker发送心跳,询问JobTracker是否有任务需要处理。

当有作业从JobClient 提交给JobTracker 后,JobTracker 处理JobClient所提交的作业的流程如下:

下面我将简单介绍其中几个部分:

1.创建Job的JobInProgress

JobInProgress对象详细的记录了Job的配置信息,以及它的执行情况,确切的来说应该是Job被分解的map、reduce任务。在JobInProgress对象的创建过程中,它主要干了两件事,一是把Job的job.xml、job.jar文件从Job目录copy到JobTracker的本地文件系统(job.xml->*/jobTracker/jobid.xml,job.jar->*/jobTracker/jobid.jar);二是创建JobStatus和Job的mapTask、reduceTask存队列来跟踪Job的状态信息。

2.检查客户端是否有权限提交Job

JobTracker验证客户端是否有权限提交Job实际上是交给QueueManager来处理的,关于QueueManager是如何验证客户端对Job有哪些操作,我将会写一篇博文详细的讨论这个问题。

3.检查当前mapreduce集群能够满足Job的内存需求

客户端提交作业之前,会根据实际的应用情况配置作业任务的内存需求,同时JobTracker为了提高作业的吞吐量会限制作业任务的内存需求,所以在Job的提交时,JobTracker需要检查Job的内存需求是否满足JobTracker的设置。

详细代码如下:

private void checkMemoryRequirements(JobInProgress job) throws IOException {
    if (!perTaskMemoryConfigurationSetOnJT()) {
      LOG.debug("Per-Task memory configuration is not set on JT. " + "Not checking the job for invalid memory requirements.");
      return;
    }

    boolean invalidJob = false;
    String msg = "";
    long maxMemForMapTask = job.getJobConf().getMemoryForMapTask(); //获取Job的map任务内存需求
    long maxMemForReduceTask = job.getJobConf().getMemoryForReduceTask();//获取Job的reduce任务内存需求

    if (maxMemForMapTask == JobConf.DISABLED_MEMORY_LIMIT || maxMemForReduceTask == JobConf.DISABLED_MEMORY_LIMIT) {
      invalidJob = true;
      msg = "Invalid job requirements.";
    }

    if (maxMemForMapTask > limitMaxMemForMapTasks || maxMemForReduceTask > limitMaxMemForReduceTasks) {
      invalidJob = true;
      msg = "Exceeds the cluster‘s max-memory-limit.";
    }

    if (invalidJob) {
      StringBuilder jobStr =
          new StringBuilder().append(job.getJobID().toString()).append("(")
              .append(maxMemForMapTask).append(" memForMapTasks ").append(
                  maxMemForReduceTask).append(" memForReduceTasks): ");
      LOG.warn(jobStr.toString() + msg);

      throw new IOException(jobStr.toString() + msg);
    }
  }

JobTracker的全局变量limitMaxMemForMapTasks 和limitMaxMemForReduceTasks可以通过配置文件来设置,它们分别对应配置文件中的mapred.cluster.max.map.memory.mb项和mapred.cluster.max.reduce.memory.mb项。

参考 ----http://www.linuxidc.com/Linux/2012-01/50860.htm

时间: 2024-08-07 16:07:24

Hadoop 学习笔记四--JobTracker 的执行过程的相关文章

Hadoop 学习笔记三 --JobClient 的执行过程

一. MapReduce 作业处理过程概述 当用户在使用Hadoop 的 MapReduce 计算模型处理问题的时候,只需要设计好Mapper 和Reducer 处理函数,还有可能包括Combiner 函数.之后,新建一个Job 对象,并对Job 的运行环境进行一些配置,最后调用Job 的waitForCompletion 或者 submit 方法来提交作业即可.代码如下: 1 //新建默认的Job 配置对象 2 Configuration conf = new Configuration();

Hadoop 学习笔记四 ---Hadoop系统通信协议介绍

本文约定: DN: DataNode TT: TaskTracker NN: NameNode SNN: Secondry NameNode JT: JobTracker 本文介绍Hadoop各节点和Client之间通信协议. Hadoop的通信是建立在RPC的基础上,关于RPC的详解介绍大家可以参照 "hadoop rpc机制 && 将avro引入hadoop rpc机制初探" Hadoop中节点之间的通信是比较复杂的一个网络,若可以把它们之间的通信网络了解清楚,那么

hadoop学习笔记(四)——eclipse+maven+hadoop2.5.2源码

Eclipse中用maven导入hadoop源码 1)  安装并配置maven环境变量 M2_HOME: D:\profession\hadoop\apache-maven-3.3.3 PATH: %M2_HOME%\bin; 2)  验证:mvn –version 3)  下载protobuf-2.5.0.tar.gz 和 protoc-2.5.0-win32.zip 4)  将protoc-2.5.0-win32中的protoc.exe拷贝到c:\windows\system32中 5) 

Hadoop学习笔记四

一.fsimage,edits和datanode的block在本地文件系统中位置的配置 fsimage:hdfs-site.xml中的dfs.namenode.name.dir  值例如file:///opt/software/hadoop/data/nn/image edits:hdfs-site.xml中的dfs.namenode.edits.dir datanode block:hdfs-site.xml中的dfs.datanode.data.dir secondarynanode的fsi

hadoop 学习笔记:mapreduce框架详解

hadoop 学习笔记:mapreduce框架详解 开始聊mapreduce,mapreduce是hadoop的计算框架,我 学hadoop是从hive开始入手,再到hdfs,当我学习hdfs时候,就感觉到hdfs和mapreduce关系的紧密.这个可能是我做技术研究的 思路有关,我开始学习某一套技术总是想着这套技术到底能干什么,只有当我真正理解了这套技术解决了什么问题时候,我后续的学习就能逐步的加快,而学习 hdfs时候我就发现,要理解hadoop框架的意义,hdfs和mapreduce是密不

Hadoop学习笔记_4_实施Hadoop集群 --伪分布式安装

实施Hadoop集群 --伪分布式安装 准备与配置安装环境 安装虚拟机和linux,虚拟机推荐使用vmware,PC可以使用workstation,服务器可以使用ESXi,在管理上比较方便.ESXi还可以通过拷贝镜像文件复制虚拟机,复制后自动修改网卡号和ip,非常快捷.如果只是实验用途,硬盘大约预留20-30G空间. 以Centos为例,分区可以选择默认[如果想要手动分区,请参考博客:http://blog.csdn.net/zjf280441589/article/details/175485

Hadoop学习笔记(2) ——解读Hello World

Hadoop学习笔记(2) ——解读Hello World 上一章中,我们把hadoop下载.安装.运行起来,最后还执行了一个Hello world程序,看到了结果.现在我们就来解读一下这个Hello Word. OK,我们先来看一下当时在命令行里输入的内容: $mkdir input $cd input $echo "hello world">test1.txt $echo "hello hadoop">test2.txt $cd .. $bin/ha

Hadoop学习笔记—22.Hadoop2.x环境搭建与配置

自从2015年花了2个多月时间把Hadoop1.x的学习教程学习了一遍,对Hadoop这个神奇的小象有了一个初步的了解,还对每次学习的内容进行了总结,也形成了我的一个博文系列<Hadoop学习笔记系列>.其实,早在2014年Hadoop2.x版本就已经开始流行了起来,并且已经成为了现在的主流.当然,还有一些非离线计算的框架如实时计算框架Storm,近实时计算框架Spark等等.相信了解Hadoop2.x的童鞋都应该知道2.x相较于1.x版本的更新应该不是一丁半点,最显著的体现在两点: (1)H

Hadoop学习笔记(6) ——重新认识Hadoop

Hadoop学习笔记(6) ——重新认识Hadoop 之前,我们把hadoop从下载包部署到编写了helloworld,看到了结果.现是得开始稍微更深入地了解hadoop了. Hadoop包含了两大功能DFS和MapReduce, DFS可以理解为一个分布式文件系统,存储而已,所以这里暂时就不深入研究了,等后面读了其源码后,再来深入分析. 所以这里主要来研究一下MapReduce. 这样,我们先来看一下MapReduce的思想来源: alert("I'd like some Spaghetti!