【Spark】Master原理剖析-3个机制

从主备切换机制原理、注册机制原理、资源调度机制三个方面进行分析。

1.主备切换机制原理

    前话:Master实际上可以配置2个,Spark原生的standalone模式是支持Master主备切换的,也就是说, 当Active Master 节点挂掉的时候,我们可以将Standby Master切换为Active Master.

    Spark Master主备切换可以基于两种机制,一种是基于文件系统,一种是基于zookeeper,基于文件系统的主备切换机制,需要在Active Master挂掉之后,由我们手动去切换到Standy Master上,而基于zookeeper的主备切换机制,可以实现自动切换Master。

具体切换如图所示:

主备切换机制原理

1)切换到Standby Master状态后,使用持久化引擎去读取持久化的storedApps、storedDrivers、storedWorkers。

2)读取出来以后,如果storedApps、storedDrivers、storedWorkers。有任何一个是非空的,就会将持久化的Application、Driver、Worker的信息重新进行注册、注册到Master内部的内存缓存结构中。

3)注册完成后,将Application、Worker的状态都修改为UNKNOW,然后向Application所对应的Driver,以及Worker发送Standby Master的地址。

4)Driver和Worker在接收到Master发送来的地址之后,返回响应消息给新的Master。并使用completeRecovery()方法对没有发送响应消息的Driver和Worker进行处理,过滤掉它们的消息。

5)最后,调用Master自己的schedule()方法,对正在等待资源调度的Driver和Application进行调度,比如在某个worker节点上启动Driver,或者为Application在Worker上启动它需要的Executor。

总结:1.从内存缓存结构中移除2.从相关的组件的内存缓存中移除3.从持久化存储中移除

2.注册机制原理


对于Worker而言:

1)Worker在启动之后,就会向Master注册,Master做的第一件事是过滤,将状态为DEAD的Worker过滤掉,对于状态为UNKNOW的Worker,清理掉旧的Worker信息,替换为新的Worker信息。

2)过滤完成后,把Worker加入内存缓存中(HashMap),然后用持久换引擎persistenceEngine将Worker信息进行持久化(文件系统、zookeeper)

3)调用Schedule方法。

对于Driver而言:

1)用spark-submit提交spark Application的时候,首先就会注册Driver,将Driver信息放入内存缓存中(HashMap)。

2)加入等待调度队列(ArrayBuffer),用持久化引擎persistenceEngine将Driver信息持久化。

3)调用Schedule方法。

对于Application而言:

Driver启动好了,执行我们编写的Application代码,执行SparkContext初始化,底层的SparkDeploySchedulerBackend通过AppClient内部的线程ClientActor,发送RegisterApplication到Master,进行Application的注册。

1)Master将Application信息放入内存缓存(HashMap),加入等待调度的Application队列(ArrayBuffer)中。

2)用持久化引擎persistenceEngine将Driver信息持久化,调用Schedule方法。

3.资源调度机制

Diver的调度机制:

直接看schedule方法,首先判断master状态不是alive的话,直接返回。接着取出workers中所有注册的worker,进行过滤,必须是状态为alive的worker。对它调用Random的shuffle方法,进行随机的打乱。再调度Driver,这里说一下Driver的调度机制,首先遍历waitingDrivers ArrayBuffer,直到所有的worker全部遍历到。里面的launchDriver方法很重要。在launchDriver方法中,首先将driver加入worker内存的缓存结构,并将worker内使用的内存和cpu数量都加上driver需要的内存和cpu数量,同时把worker也加入到driver内部的缓存结构中,然后调用worker的actor,给它发送launchDriver消息,让worker来启动driver,并把driver的状态设置为RUNNING。

Application的调度机制:

首先application的调度方法有两种,一种是spreadOutApps,另一种是非spreadOutApps。

1)对于第一种而言,首先遍历waitingApps中的ApplicationInfo,并且过滤出还有需要调度的core的Application。其次,从workers中,过滤出状态为Alive的,再次过滤出可以被application使用的worker,然后按照剩余内存CPU数量倒序排序,通过数组来存储每个worker的CPU数量,并给每个worker分配cpu core,分配完成后,遍历worker,只要此worker上分配了core以后,就在worker上启动executor,并将application状态设置为RUNNING。

2)对于非spreadOutApps方法,主要区别是将每一个Application,尽可能少的分配到worker上面去。

举个例子来说:比如总共有10个worker,每个有10个core,app总共有20个core,那么其实只会分配到两个worker上,每个worker都占满10个core,总共只会启动2个executor,每个对应10个core。而在第一种而言,会启动20个executor,每个对应1个core。

接下来就看worker原理了。。。。

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

推荐阅读更多精彩内容

  • spark-submit的时候如何引入外部jar包 在通过spark-submit提交任务时,可以通过添加配置参数...
    博弈史密斯阅读 2,740评论 1 14
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,651评论 18 139
  • Spark是什么 a)是一种通用的大数据计算框架 b)Spark Core离线计算 Spark SQL交互式查询 ...
    Alukar阅读 1,788评论 0 19
  • 这年九月,我在别人的家乡 这年十月,我沐着异乡月光 这年十一月,我看不到熟悉的模样 这年十二月,我触不到雪花的冰凉...
    秋挽亭阅读 327评论 0 0
  • 2009年,中考前一个月到处疯玩的我,也不在乎会不会考上一个好一点的高中了,直到成绩下来那天,由于志愿填错,还是没...
    ROVME阅读 173评论 0 1