[转载]Yarn做业提交流程

一、yarn简述

yarn是一个资源调度平台,负责为运算程序提供服务器运算资源,至关于一个分布式操做系统平台,而mapreduce等运算程序则至关于运行与操做系统之上的应用程序。yarn在hadoop2.x系列中被加入的资源管理器,取代hadoop1.x中的jobtracker,将资源管理与做业调度分离。web

 

二、yarn的重要概念

2.一、yarn不须要清楚用户提交程序的运行机制。服务器

2.二、yarn只负责提供运算资源(为运算程序提供一个容器,容器的资源由yarn负责分配)。网络

2.三、yarn的实现是主从关系,主动角色为ResourceManager、被动角色为NodeManager负责提供运算资源。框架

2.四、yarn与用户进程彻底解耦,意味着yarn上能够运行各类类型的分布式运算程序,如mapreduce、storm、spark和tez等。因此经过yarn提供的接口一样能够实现本身的运算框架。分布式

2.五、yarn是一个通用的资源调度平台,今后,生产中存在各类运算集群均可以整合在一个物理集群上,提升资源利用率,方便数据共享。oop


3 、Yarn进程

3.1.ResourceManager ------>yarn的老大
3.2.NodeManager        ------>yarn的小弟
3.3.ResourceManager调度器   a.默认调度器------>先进先出FIFO
                                                   b.公平调度器------>每一个任务都有执行的机会
......
3.4.心跳机制                 ------>NodeManager可经过心跳机制将节点健康情况实时汇报给ResourceManager,而ResourceManager则会    根据每一个NodeManager的健康情况适当调整分配的任务数目。当NodeManager认为本身的健康情况“欠    佳”时,可以让  ResourceManager再也不分配任务,待健康情况好转时,再分配新任务。
3.5.NodeManager子进程------>独立于NodeManager,不在NodeManager内部spa

四、YARN框架流程操作系统

任何框架与YARN的结合,都必须遵循YARN的开发模式。在分析Spark on YARN的实现细节以前,有必要先分析一下YARN框架的一些基本原理。orm

Yarn框架的基本运行流程图为:blog

其中,ResourceManager负责将集群的资源分配给各个应用使用,而资源分配和调度的基本单位是Container,其中封装了机器资源,如内存、CPU、磁盘和网络等,每一个任务会被分配一个Container,该任务只能在该Container中执行,并使用该Container封装的资源。NodeManager是一个个的计算节点,主要负责启动Application所需的Container,监控资源(内存、CPU、磁盘和网络等)的使用状况并将之汇报给ResourceManager。ResourceManager与NodeManagers共同组成整个数据计算框架,ApplicationMaster与具体的Application相关,主要负责同ResourceManager协商以获取合适的Container,并跟踪这些Container的状态和监控其进度。

五、Yarn提交做业流程

5.1 YARN-Client

Yarn-Client模式中,Driver在客户端本地运行,这种模式可使得Spark Application和客户端进行交互,由于Driver在客户端,因此能够经过webUI访问Driver的状态,默认是http://hadoop1:4040访问,而YARN经过http:// hadoop1:8088访问。

YARN-client的工做流程分为如下几个步骤:

  • 1.Spark Yarn Client向YARN的ResourceManager申请启动Application Master。同时在SparkContent初始化中将建立DAGScheduler和TASKScheduler等,因为咱们选择的是Yarn-Client模式,程序会选择YarnClientClusterScheduler和YarnClientSchedulerBackend;
  • 2.ResourceManager收到请求后,在集群中选择一个NodeManager,为该应用程序分配第一个Container,要求它在这个Container中启动应用程序的ApplicationMaster,与YARN-Cluster区别的是在该ApplicationMaster不运行SparkContext,只与SparkContext进行联系进行资源的分派
  • 3.Client中的SparkContext初始化完毕后,与ApplicationMaster创建通信,向ResourceManager注册,根据任务信息向ResourceManager申请资源(Container);
  • 4.一旦ApplicationMaster申请到资源(也就是Container)后,便与对应的NodeManager通讯,要求它在得到的Container中启动启动CoarseGrainedExecutorBackend,CoarseGrainedExecutorBackend启动后会向Client中的SparkContext注册并申请Task;
  • 5.Client中的SparkContext分配Task给CoarseGrainedExecutorBackend执行,CoarseGrainedExecutorBackend运行Task并向Driver汇报运行的状态和进度,以让Client随时掌握各个任务的运行状态,从而能够在任务失败时从新启动任务;
  • 6.应用程序运行完成后,Client的SparkContext向ResourceManager申请注销并关闭本身。

5.二、 YARN-Cluster

在YARN-Cluster模式中,当用户向YARN中提交一个应用程序后,YARN将分两个阶段运行该应用程序:第一个阶段是把Spark的Driver做为一个ApplicationMaster在YARN集群中先启动;第二个阶段是由ApplicationMaster建立应用程序,而后为它向ResourceManager申请资源,并启动Executor来运行Task,同时监控它的整个运行过程,直到运行完成。

YARN-cluster的工做流程分为如下几个步骤:

  • 1.Spark Yarn Client向YARN中提交应用程序,包括ApplicationMaster程序、启动ApplicationMaster的命令、须要在Executor中运行的程序等;
  • 2.ResourceManager收到请求后,在集群中选择一个NodeManager,为该应用程序分配第一个Container,要求它在这个Container中启动应用程序的ApplicationMaster,其中ApplicationMaster进行SparkContext等的初始化;
  • 3.ApplicationMaster向ResourceManager注册,这样用户能够直接经过ResourceManage查看应用程序的运行状态,而后它将采用轮询的方式经过RPC协议为各个任务申请资源,并监控它们的运行状态直到运行结束;
  • 4.一旦ApplicationMaster申请到资源(也就是Container)后,便与对应的NodeManager通讯,要求它在得到的Container中启动启动CoarseGrainedExecutorBackend,CoarseGrainedExecutorBackend启动后会向ApplicationMaster中的SparkContext注册并申请Task。这一点和Standalone模式同样,只不过SparkContext在Spark Application中初始化时,使用CoarseGrainedSchedulerBackend配合YarnClusterScheduler进行任务的调度,其中YarnClusterScheduler只是对TaskSchedulerImpl的一个简单包装,增长了对Executor的等待逻辑等;
  • 5.ApplicationMaster中的SparkContext分配Task给CoarseGrainedExecutorBackend执行,CoarseGrainedExecutorBackend运行Task并向ApplicationMaster汇报运行的状态和进度,以让ApplicationMaster随时掌握各个任务的运行状态,从而能够在任务失败时从新启动任务;
  • 6.应用程序运行完成后,ApplicationMaster向ResourceManager申请注销并关闭本身。

六、YARN-Client 与 YARN-Cluster 区别

理解YARN-Client和YARN-Cluster深层次的区别以前先清楚一个概念:Application Master。在YARN中,每一个Application实例都有一个ApplicationMaster进程,它是Application启动的第一个容器。它负责和ResourceManager打交道并请求资源,获取资源以后告诉NodeManager为其启动Container。从深层次的含义讲YARN-Cluster和YARN-Client模式的区别其实就是ApplicationMaster进程的区别。

YARN-Cluster模式下,Driver运行在AM(Application Master)中,它负责向YARN申请资源,并监督做业的运行情况。当用户提交了做业以后,就能够关掉Client,做业会继续在YARN上运行,于是YARN-Cluster模式不适合运行交互类型的做业;

YARN-Client模式下,Application Master仅仅向YARN请求Executor,Client会和请求的Container通讯来调度他们工做,也就是说Client不能离开。

相关文章
相关标签/搜索