Spark源码系列-Yarn模式下Client&Cluster模式的资源启动

本文带读者从源码查看,分析Yarn模式下Client&Cluster模式的资源启动流程,分析Client&Cluster究竟有什么不一样

回顾

在xxxx中我们分析了Standalone模式下Master和Worker的启动流程。


image.png
  • Master负责集群总资源的管理,包括CPU、内存的分配以及所有Applications的管理、Cluster模式下还有所有的driver的管理。Master启动后会定时清理没有上报心跳的Worker
  • Master启动后会向Master注册自己(RegisterWorker),将自己的CPU cores和内存大小上报给Master,并定时发送心跳,更新Master里面属于自己ID的时间戳

资源有了,接下来需要启动我们自己的Application。

SparkSubmit提交代码

image.png
image.png

通过分析spark-submit脚本,我们知道最终启动的是SparkSubmit类,接下来的调用流程如下所示。


image.png

最终通过prepareSumitEnvironment解析出mainClass,最终在SparkApplication start方法中,通过反射调用MainClass的main方法,解析的MainClass如下

image.png

Yarn Client 源码分析

由上可知,最终我们解析的是用户的Class,而最重要的类就是SparkContext,高版本是SparkSession,本质是将SparkContext作为SparkSession的成员变量。

Yarn Client 总架构

SparkSession

SparkSession将SparkContext作为的自己成员变量

image.png
image.png

SparkContext

createTaskScheduler

重点需要看createTaskScheduler方法,然后调用start

image.png

TaskSchedulerImpl

这里会创建TaskSchedulerImpl和StandaloneSchedulerBackend,并通过initialize将StandaloneSchedulerBackend放入TaskSchedulerImpl中,结合上图,会调用StandaloneSchedulerBackend的start方法


image.png
image.png
image.png

这里的cm(clusterManager)是 YarnClusterManager,scheduler是YarnScheduler, backend是YarnClientSchedulerBackend

YarnClusterManager.initialize() 方法

YarnClusterManager继承TaskSchedulerImpl,
将Backend作为自己的成员变量,并通过schedulingMode创建调度是FIFOSchedulableBuilder还是FairSchedulableBuilder,这里是提交task的时候用到的调度方式


image.png

YarnClientSchedulerBackend

YarnClientSchedulerBackend继承YarnSchedulerBackend,YarnSchedulerBackend 继承CoarseGrainedSchedulerBackend


image.png

start方法第一部分

首先调用super.start,查看super.start方法为CoarseGrainedSchedulerBackend的start方法

image.png

CoarseGrainedSchedulerBackend.start()

image.png

这里调用了createDriverEndpointRef,可以看到关键词driver了,其实driver本质上的类是DriverEndpoint,结合Spark RPC框架,我们可以知道Driver的生命周期方法。

onStart() 和 receive

这里启动一个定时线程,定时给自己发送ReviveOffers,给自己发送case class ReviveOffers

image.png
makeOffers

通过命名方式我们可以知道,这里是在获取可用的executors的资源,将task信息包装成taskDescs,在Executor上启动task


image.png

将task序列化后发送给Executor,但是这里并未真正执行,因为还没有申请到Executor资源,所以onstart里的定时线程将会一直尝试执行,直到申请到executor,就会在上面launchTasks


image.png

Driver

本质上Driver是CoarseGrainedSchedulerBackend里的一个成员变量,负责序列化并通过RPC发送给有资源的Executor执行task,但是在这里并没有执行,因为还没有申请到执行资源Executor。接下来回到我们的YarnSchedulerBackend中

image.png

start方法第二部分

第一部分调用了super.start我们知道了Driver的本质和职责接下来,看第二部分

image.png
org.apache.spark.deploy.yarn.Client

Client中有一个yarnClient成员变量,与yarn集群做RPC通信,提交Application使用

image.png
org.apache.spark.deploy.yarn.Client. submitApplication
image.png

createContainerLaunchContext中会申请ApplicationMaster的启动信息,并指定启动类,

  • cluster模式: org.apache.spark.deploy.yarn.ApplicationMaster
  • client模式:org.apache.spark.deploy.yarn.ExecutorLauncher


    image.png
ExecutorLauncher

什么也没有做,就是调用了ApplicationMaster的main方法


image.png
org.apache.spark.deploy.yarn.ApplicationMaster

会根据运行模式(client or cluster), 这里是client模式,所以执行runExecutorLauncher

image.png
image.png
image.png
image.png
image.png

通过ExecutorRunnable来启动Executor

image.png

ExecutorRunnable中有nmClient, 就是NodeManagerClient, 通过nmClient与NodeManager RPC通信, 启动Executor


image.png

prepareCommand会指定Executor所启动的类


image.png

这个类就是CoarseGrainedExecutorBackend, 并且会传入driver url,


image.png
Executor 启动

CoarseGrainedExecutorBackend也是一个EndPoint,所以也会走RPC的生命周期方法,一个很重要的点是,Client -> Master->Worker ->Executor将driverUrl的信息传递给Executor,Executor启动后根据driverUrl向driverUrl反向注册自己


image.png

Driver接收到Executor注册后,运算资源已经有了,DriverEndpoint里的开始调度,如果有Task,就开始LaunchTask,到此,Spark On Yarn Client源码分析完毕

image.png

接下来分析 Yarn Cluster模式

Yarn Cluster 总架构

Cluster与Client不同的是,Client的Driver(分配Task)和ApplicationMaster(申请资源)是不在同一个进程里面的,Cluster模式的Driver(分配Task)和ApplicationMaster(申请资源)不同一个进程里

image.png

由SparkSubmit图我们可以知道,Cluster模式里,启动的是YarnClusterApplication

YarnClusterApplication

image.png

org.apache.spark.deploy.yarn.Client

这个是和 client 模式中使用同样的Client类,不同的是,cluster启动的是org.apache.spark.deploy.yarn.ApplicationMaster, 前面我们分析知道client模式中org.apache.spark.deploy.yarn.ExecutorLauncher 其实就是调用了ApplicationMaster.main(), 还有一点是cluster模式中,需要启动driver

image.png
ApplicationMaster
image.png
runDriver

在ApplicationMaster进程中,通过反射调用userClass, userClass中就会启动SparkSession, SparkContext等.


image.png
image.png

分析源码可以得到下面这个图,本质上还是用的CoarseGrainedExecutorBackend里的driver

image.png
ApplicationMaster里的资源申请(启动Executor)

逻辑和client分析过程一样的,就是通过ExecutorRunnable启动CoarseGrainedExecutorBackend


image.png

Yarn Cluster 总架构

image.png

总结

本文从源码,分析Yarn模式下Client&Cluster模式的资源启动流程,分析Client&Cluster究竟有什么不一样,本质的不一样就是Driver和ApplicationMaster在不在同一进程里。
本文如果有错误的地方,欢迎指出。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容