hadoop技术内幕_Hadoop基础MapReduce程序的执行流程

MapReduce程序从提交到执行是一个很复杂的过程,以下将分别讨论MapReduce1.0和Yarn环境下的任务提交和执行过程。

一、MapReduce程序提交方式

    以Hadoop Shell方式为例,提交MapReduce命令如下:

     $HADOOP_HOME/bin/hadoopappname.jar

   -D mapred.job.name=” testappname”

    -D mapred. reduce.tasks=6

    -files=blacklist.txt,whiltelist.txt

    -libjars=third-party.jar

    -archives=dictionary.zip

   -input/test/input

   -output/test/output

    其中,以参数mapred.job.name指定了程序的名字,以参数mapred. reduce.tasks设置reduce任务的个数。

后续参数分别对应程序运行需要的文件,需要的第三方依赖包,程序的输入路径和输出路径。

二、MapReduce1.0任务执行过程

hadoop技术内幕_Hadoop基础MapReduce程序的执行流程_第1张图片

图2-1MapReduce1.0任务提交流程

    在讨论详细过程之前,先要熟悉两个概念,大数据组件的角色和守护进程。在谈到HDFS时,有两个角色,一个是NameNode,另一个是DataNode;在提及MapReduce时,也有两个角色,分别是JobTracker和TaskTracker。

 每个角色的功能都由一个java程序实现并且常驻内存,而这个程序就是大数据组件的守护进程。守护进程所运行的计算机节点也可以理解为角色对应的节点。

2.1 涉及的角色

    1、HDFS是一个分布式文件系统,分NameNode和DataNode两个角色。为MapReduce程序等应用提供了全局统一的存储命名空间。集群中任何一个节点、进程或线程都可以看到相同的目录树和文件,是数据并行处理的基础。

    2、客户端,用于提交MapReduce程序。

    3、JobTracker,是一个守护进程,用于资源分配和作业调度。

    4、TaskTracker,负责运行作业划分以后的任务,启动任务进程。

2.2 主要执行步骤

如图2-1所示,MapReduce程序执行的主要步骤如下:

   1、在客户端节点执行Hadoop Shell命令以后,会产生一个JobClient实例。

    2、JobClient向JobTracker请求一个新的作业ID。检查作业的输出目录,计算作业的分片,如果有错误,则返回给MapReduce程序。

    3、将运行作业需要的资源,包括JAR文件、配置文件、splits分片信息、和第三方依赖包等上传到HDFS共享文件系统,并且保存在以作业ID命名的文件夹下。

   4、JobClient通知JobTracker准备执行作业。

   5、JobTracker接收到通知以后,将作业放入内部队列中,由作业调度器(job scheduler)进行调度。初始化时包括创建一个正在运行作业的对象,封装任务和记录信息,以便跟踪任务的状态和进度。

   6、作业调度器(job scheduler)在HDFS共享文件系统中获取第3步中的splits分片信息。然后为每个分片创建一个map任务。map任务的数量由splits个数决定,reduce任务的数量由参数mapred. reduce.tasks决定。

   7、在TaskTracker与JobTracker周期性心跳过程中附带交互信息,如果TaskTracker表明已经准备好可以执行任务,JobTracker会为它分配一个任务。

   8、TaskTracker从HDFS获取作业的JAR包和作业运行的依赖文件,保存到本地文件系统并创建一个本地工作目录。TaskTracker启动一个TaskRunner实例来运行该任务。

  9、TaskRunner启动一个新的java虚拟机(名字为childJVM,可在TaskTracker节点上执行jps命令查看)

  10、在childJVM中运行map或reducetask,任务在独立的JVM中运行,与TaskTracker不在同一个进程,出现异常也不会影响TaskTracker的正常运行。

三、MapReduce2.0任务执行过程

hadoop技术内幕_Hadoop基础MapReduce程序的执行流程_第2张图片

图2-2 Yarn环境下MapReduce程序提交流程

3.1 涉及的角色

此处HDFS功能2.1中已经进行了详细描述,不再具体讨论。

与MapReduce1.0相比,MapReduce2.0引入了独立的集群资源管理组件Yarn。将JobTracker的资源分配和任务调度功能分离开,由Yarn负责资源分配,MapReduce程序的Application Master承担任务调度的功能。两者的详细对比请参考前文<>。

    1、客户端,用于提交MapReduce程序

    2、ResourceManager,Yarn集群资源管理器,负责协调整个集群上所有资源(CPU、内存、网络和磁盘)的分配。

    3、NodeManager,Yarn节点管理器,负责启动和监视位于本节点的计算容器(container)。

    4、 MapReduce程序的Application Master, 负责协调运行MapReduce任务的作业。和map、reduce任务一样运行在容器(container)中。

3.2 主要执行步骤

此处主要描述与MapReduce1.0有差异的地方:

  1、集群启动Yarn组件且无任务提交,存在ResourceManager和NodeManager两个守护进程,集群中没有Application Master,或任何计算任务。

   2、客户端提交任务以后,ResourceManager选择某个NodeManager启动一个计算容器(container)来运行该MapReduce程序的Application Master

   3、Application Master根据分片信息,对任务进行封装。

   4、由Application Master向ResourceManager申请一组容器,容器分散在多个NodeManager中

  5、Application Master确定MapReduce任务该如何执行,根据底层数据块的局部性,通知NodeManger启动容器并运行map和reduce任务

   6、Application Master负责监控任务的执行过程

备注:

   1、Application Master不会运行在特定的节点中,而是和map、reduce任务运行一样运行在NodeManager的容器中。但是比map、reduce任务先启动。

   2、任务调度方式比较复杂,要考虑虚拟机或容器复用的问题。如果MapReduce程序很小,例如10个map以内且只有一个reduce任务。任务执行时间很短,甚至短于启动一个虚拟机的时间。那么没有必要启动多个虚拟机,可以直接在一个虚拟机或容器中执行多个任务。

四、参考文献

[1] Tom White著,王海,华东,刘喻,吕粤海 译,  Hadoop权威指南:大数据的存储与分析(第4版). 清华大学出版社. 2017

[2] 董西成,Hadoop技术内幕:深入解析MapReduce架构设计与实现原理,机械工业出版社. 2013

[3] Tom White著,周敏奇,王晓玲,金澈清,钱卫宁  译,  Hadoop权威指南 (第2版). 清华大学出版社. 2011

你可能感兴趣的:(hadoop技术内幕,mapreduce原理,mapreduce工作流程)