浅谈Spark On Yarn运行原理

时间:2024-03-16 22:36:01

一、两种运行模式

cluster模式:Driver程序在YARN中运行,应用的运行结果不能在客户端显示,所以运行那些将结果保存在外部存储介质(如HDFS、Redis、Mysql等)而非stdout输出的应用程序,客户端的终端显示仅是作为YARN的job简单运行状况。

client模式:Driver运行在Client上,应用程序运行结果会在客户端显示,所有适合运行结果有输出的应用程序(如spark-shell)

二、简单原理介绍

1、cluster模式

浅谈Spark On Yarn运行原理

Spark Driver 首先作为一个ApplicationMaster  在 YARN集群中启动,客户端提交给 ResourceManager 的每一个Job都会在集群的NodeManager节点上分配一个唯一的ApplicationMaster,由该ApplicationMaster管理全生命周期的应用。具体过程

1.由 client 向 ResourceManager 提交请求,并上传 jar 到 HDFS 上

这期间包括四个步骤:

a)连接到RM;

b)从RM到ASM(ApplicationsManager)中获利metric、queue 和 resource等信息;

c)upload app jar and spark-assembly jar

d)设置运行环境和 container 上下文(launch-container.sh等脚本)

2.ResourceManager 向 NodeManager 申请资源,创建 Spark ApplicationManager (每个SparkContext都有一个ApplicationMaster)

3.NodeManager 启动 ApplicationMaster,并向 ResourceManager ASM注册

4.ApplicationMaster从HDFS中找到 jar 文件,启动 SparkContext、DAGscheduler 和 YARN Cluster Scheduler

5.ResourceManager 向 ResourceManager ASM 注册申请 container 资源

6.ResourceManager 通知 NodeManager 分配 Container,这时可以收到来自 ASM 关于 contianer 报告。(每个 container 对应一个 executor)

7.Spark ApplicationMaster 直接和 container(executor)进行交互,完成这个分布式任务。

2、client 模式

浅谈Spark On Yarn运行原理

在 client 模式下,Driver 运行在 Client 上,通过 ApplicationMaster 向 RM 获取资源。本地 Driver 负责与所有的 executor container 进行交互,并将最后的结果汇总。结束掉终端,相当于kill 掉这个 spark 应用。一般来说,如果运行的结果仅仅返回到 terminal 上时需要配置这个。

客户端的 Driver 将应用提交给 Yarn 后,Yarn 会先后启动 ApplicationMaster 和 executor,另外 ApplicationMaster 和 executor 都是装载在 container 里运行,container默认的内存是 1G,ApplicationMaster 分配的内存是 driver-memory,executor 分配的内存是 executor-memory。同时,因为 Driver 在客户端,所以程序的运行结果可以在客户端显示,Driver以进程名为SparkSubmit 的形式存在。