Spark学习之路(五)——Spark on YARN

1、Spark on YARN:

Spark在YARN上运行时,有两种部署模式:集群模式(Cluster)和客户端模式(Client)。

2、不同运行模式中的任务调度器具体为:

Spark on Standalone模式:TaskScheduler
YARN-Client模式:YarnClientClusterScheduler
YARN-Cluster模式:YarnClusterScheduler

3、Spark on YARN-Client:

用户在进行交互运行时,必须运行在Client模式下。在YARN-Client模式中,Driver运行在客户端上,通过ApplicationMaster向ResourceManager获取资源。本地Driver负责与所有的Executor Container进行交互,并将最终的结果汇总。
YARN-Client工作流程步骤:
在这里插入图片描述
①Spark Yarn Client向YARN的ResourceManager申请启动Application Master。同时在SparkContext初始化中创建DAGScheduler和TaskScheduler(YarnClientClusterScheduler)等;
②ResourceManager收到请求后,在集群中选择一个NodeManager,为该应用程序分配第一个Container,要求它在这个Container中启动应用程序的ApplicationMaster,与YARN-Cluster区别的是在该ApplicationMaster不运行SparkContext,只与SparkContext进行通信进行资源的分派;
③Client中的SparkContext初始化完毕后,与ApplicationMaster建立通信,向ResourceManager注册,根据任务信息向ResourceManager申请资源;
④一旦ApplicationMaster申请到资源(Container)后,便与对应的NodeManager通信,要求它在获得的Container中启动CoarseGrainedExecutorBackend,CoarseGrainedExecutorBackend启动后会向Client中的SparkContext注册并申请Task;
⑤client中的SparkContext分配Task给CoarseGrainedExecutorBackend执行,CoarseGrainedExecutorBackend运行Task,并向Driver汇报运行的状态和进度,以让Client随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务;
⑥应用程序运行完成后,Client的SparkContext向ResourceManager申请注销并关闭。
在这里插入图片描述

4、Spark on YARN-Cluster:

在YARN-Cluster模式中,当用户向YARN中提交应用程序后,YARN分两个阶段运行该应用程序:①把Spark的Driver作为一个ApplicationMaster在YARN集群中先启动;②由ApplicationMaster创建应用程序,然后为它向ResourceManager申请资源,并启动Executor来运行Task,同时监控它的整个运行过程,直到运行完成。
YARN-Cluster工作流程步骤:
在这里插入图片描述
①Spark Yarn Client向YARN的ResourceManager提交应用程序,包括ApplicationMaster程序、启动ApplicationMaster的命令、需要在Executor中运行的程序等;
②ResourceManager收到请求后,在集群中选择一个NodeManager,为该应用程序分配第一个Container,要求它在这个Container中启动应用程序的ApplicationMaster,其中ApplicationMaster进行SparkContext等的初始化;
③ApplicationMaster向ResourceManager注册,用户可以直接通过ResourceManager查看应用程序的运行状态,然后它将采用轮询的方式通过RPC协议为各个任务申请资源,并监控它们的运行状态直到运行结束;
④一旦ApplicationMaster申请到资源(Container)后,便与对应的NodeManager通信,要求它在获得的Container中启动CoarseGrainedExecutorBackend,而Executor对象的创建及维护是由CoarseGrainedExecutorBackend负责的,CoarseGrainedExecutorBackend启动后会向ApplicationMaster中的SparkContext注册并申请Task。这一点和Standalone模式一样,只不过SparkContext在Spark Application中初始化时,使用CoarseGrainedSchedulerBackend配合YarnClusterScheduler进行任务的调度,其中YarnClusterScheduler只是对TaskSchedulerImpl的一个简单包装,增加了对Executor的等待逻辑等;
⑤ApplicationMaster中的SparkContext分配Task给CoarseGrainedExecutorBackend执行,CoarseGrainedExecutorBackend运行Task,并向ApplicationMaster汇报运行的状态和进度,以让ApplicationMaster随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务;
⑥应用程序运行完成后,ApplicationMaster向ResourceManager申请注销并关闭。
在这里插入图片描述

5、YARN-Client与YARN-Cluster的区别

在YARN中,每个应用程序(Application)都有一个ApplicationMaster进程,它是Application启动的第一个容器。它负责与ResourceManager进行通信并请求资源,获取资源后,为Container分配任务并对其进行监控。YARN-Client与YARN-Cluster的区别其实就是ApplicationMaster进程的区别。

  • YARN-Client模式下,ApplicationMaster仅向YARN请求Executor,Client通过与Container通信来分配任务并进行监控,Client不能关闭;
  • YARN-Cluster模式下,Driver运行在AM(ApplicationMaster)中,它负责向YARN申请资源,并监督作业的运行状况。当用户提交了作业之后,就可以关闭Client,作业会继续在YARN上运行,因而YARN-Cluster模式不适合交互式类型的作业。
YARN-ClientYARN-Cluster
Driver运行在RM中Driver运行在集群中的某一台NM上
Client和Executor进行通信,不可关闭ClientDriver和Executor进行通信,可关闭Client
适合交互和调试适合生产环境

6、Spark Standalone与Spark on YARN的对比

Spark StandaloneYARN-ClientYARN-Cluster
Driver runs inClientClientApplication Master
Who requests resources?ClientApplication MasterApplication Master
Who starts executor processes?Spark SlaveYARN NodeManagerYARN NodeManager
Persistent servicesSpark Master and WorkersResourceManager and NodeManagersResourceManager and NodeManagers
Supports Spark Shell?YesYesNo

7、Spark on YARN的资源分配配置(文件:spark-default.conf)

关于Application Master(AM)的配置
YARN-Client

属性默认值描述
spark.yarn.am.memory512m在客户端模式下,用于YARN AM的内存量。
spark.yarn.am.cores1在客户端模式下,用于YARN AM的内核数。
spark.yarn.am.memoryOverheadAM memory * 0.10, with minimum of 384在客户端模式下,为每个YARN AM分配的堆外内存量(单位:MB)。

YARN-Cluster

属性默认值描述
spark.driver.memory1g用于Driver进程的内存量,即SparkContext初始化的内存量。注意:在客户端模式下,不能直接在应用程序中通过SparkConf设置此配置,因为驱动程序JVM已在此时启动。
spark.driver.cores1在集群模式下,Driver进程的内核数。
spark.driver.memoryOverheaddriverMemory * 0.10, with minimum of 384除非另有说明,否则在集群模式下,为每个Driver分配的堆外内存量(单位:MB)。

关于Executor的配置(yarn-client、yarn-cluster配置相同)

属性默认值描述
spark.executor.instances2静态分配的Executor数。使用spark.dynamicAllocation.enabled时,初始执行程序集至少含有该数量的executor数。
spark.executor.memory1g每个Executor进程使用的内存量。
spark.executor.coresYARN模式下默认为1;Standalone和Mesos粗粒度模式下默认为工作节点上所有可用的内核。每个Executor使用的内核数。
spark.executor.memoryOverheadexecutorMemory * 0.10, with minimum of 384除非另有说明,否则每个Executor要分配的堆外内存量(单位:MB)。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值