Spark学习笔记三_下 Spark 核心原理


架构简要介绍在前几片博客提过了

Spark的消息通信原理

通信模块类图

首先看一下Spark的消息通信的类图


Spark通信类图

最核心的是左上角的虚线框的四个类
首先定义了RpcEnvFactoryRpcEnv两个抽象类,在RpcEnv中定义的是RPC通信框架的启动停止和关闭等抽象方法,在RpcEnvFactoty中定义的是创建的抽象方法。然后下面两个类分别使用Netty对继承的方法进行了实现,分别是NettyRpcEnvFactoryNettyRpcEnv
NettyRpcEnv中启动终端点的方法为setupEndpoint,在此方法中会将RpcEndPointRpcEndpointRef相互以键值对的形式存放在线程安全的ConcurrentHashMap中。
RpcEnv的object提供反射的方式来创建该类的一个静态实例。
在各模块进行通信的时候,需要调用这些类。比如MasterWorker等。会先使用RpcEnv的静态方法创建RpcEnv实例,然后实例化Master,其中Master是ThreadSafeRpcEndPoint的一个子类,所以创建的Master是一个线程安全的实例。接着通过先前创建的RpcEnv的实例来调用启动终端点方法,把Master终端点和其对于的Ref注册到RpcEnv中去,这一步是由方法setupEndpoint来实现的。
在通信的时候,其他对象获得了Master的终端店的Ref便可以发送消息给Master节点。

Spark启动时通信

意思就是启动过程中的通信,主要是MasterWorker节点之间的通信。

详细过程如下:

  1. Master启动后,随后启动各个Worker节点,Worker启动时和Master启动时流程类似,首先创建通信环境RpcEnv的静态对象,创建一个Worker EndPoint,随后就于Master通信,向Master发送一个注册Worker的消息RegisterWorker
    一个Worker可能回注册到多个Master中去,这时候需要在WorkertryRegisterAllMasters中创建注册线程池registerMasterThreadPool。然后启动注册线程去注册,每个注册过程:先获取Master的一个终端点EndPoint的引用然后调用registerWithMaster方法。

  2. Master收到注册消息,开始对Worker的消息进行验证和记录。注册成功则返回给Worker一个RegisteredWorker消息,否则发送RegisterWorkerFailed消息,worker收到消息后打印出错日志并结束Worker启动。
    验证过程:Master维持一张注册列表。接收到WorkerRegisterWorker消息后,Master首先对自己的状态进行验证,如果自己处于StandBy状态则忽略Worker的消息。否则在注册表中查询该Worker的节点,若找到了,则返回RegisterWorkerFailedWorker,否则调用registerWorker方法把该Worker加入注册表中。

  3. Worker收到成功注册的消息,先记录日志并更新Master消息,则之后会提供定时调度进程发送心跳信息HeartbeatMaster

Spark运行时消息通信


运行时存在几个对象:
客户端端点 client EndPoint,客户端的驱动程序 Driver,SparkContext,以及Worker中的Executor和worker endpoint,Master的端点Master endpoint。

这些对象之间的协作如下:
1.首先客户端执行应用程序会先创建一个Spark ContextSpark Context在启动过程中先实例化一个ScahdulerBackend对象,在standalone时是创建的SparkDeploySchedulerBackend对象,该对象是Driver EndPoint的子类,在该对象启动过程中又会创建Client Endpoint对象。
此时客户端的对象都创建结束。
之后Client EndPoint对象会有一个tryRegisterAllMasters方法,就和启动时通信中Worker持有的一样,Client EndPoint 向 Master发送注册应用的请求。

  1. Master收到client请求,在registerApplication方法中记录应用信息并把该应用加入到等待运行的应用列表中去。同时调用startExecutorOnWorker方法运行应用,在方法首先获取满足条件的worker节点(内存满足启动Executor所需,核数大于1),最后向该worker发送 LaunchExecutor消息。

  2. Worker收到Master请求后。第一步通过SPARK_EXECUTOR_DIRS环境变量创建Executor的执行目录当程序执行结束之后由Worker剔除。第二步实例化一个Executor对象,在该对象启动中会创建一个进程生成器ProcessBuilder,然后该生成器使用command创建CoarseGrainedExecutorBackend对象,该对象是Executor运行的容器。生成完成后,第三步,worker向Master返回ExecutorStateChanged消息告知Master,Executor容器创建完成。

  3. 3中创建的CoarseGrainedExecutorBackend对象的启动方法onStart会向DriverEndPoint发送Executor的注册消息。

  4. Driver EndPoint收到了注册消息RegisterExecutor之后会先判断8Executor*是否已经被注册过了,若是则返回注册失败消息,否则返回注册成功消息,并Driver终端记录该Executor并在makeOffers()中给该Executor分配运行任务资源,发后发生LaunchTask消息。

  5. CoarseGrainedExecutorBackend对象收到注册成功消息后,在CoarseGrainedExecutorBackend容器中实例化Executor对象,启动完毕后定时向Driver发送心跳信息,等待从DriverEndPoint终端点发送执行任务的消息。

  6. CoarseGrainedExecutorBackend对象接受LaunchTask消息后,调用Executor的launchTask,在执行时创建TaskRunner进程。处理完毕后发送StatusUpdate消息返回给CoarseGrainedExecutorBackendCoarseGrainedExecutorBackend对象将StatusUpdate返回给DriverEndPointDriverEndPoint收到消息调用taskSchedulerImplstatusUpdate*。

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

推荐阅读更多精彩内容