Spark Storage ③ - Master 與 Slave 之間的消息傳遞與時(shí)機(jī)

本文為 Spark 2.0 源碼分析筆記厘托,某些實(shí)現(xiàn)可能與其他版本有所出入

再次重申標(biāo)題中的 Master 是指 Spark Storage 模塊的 Master友雳,是運(yùn)行在 driver 上的 BlockManager 及其包含的 BlockManagerMaster、RpcEnv 及 RpcEndpoint 等铅匹;而 Slave 則是指 Spark Storage 模塊的 Slave押赊,是運(yùn)行在 executor 上的 BlockManager 及其包含的 BlockManagerMaster、RpcEnv 及 RpcEndpoint 等包斑。下文也將沿用 Master 和 Slave 簡(jiǎn)稱流礁。

Master 與 Slaves 之間是通過消息進(jìn)行通信的,本文將分析 Master 與 Slaves 之間重要的消息以及這些消息是在什么時(shí)機(jī)被觸發(fā)發(fā)送的罗丰。

Master -> Slave

先來看看 Master 都會(huì)發(fā)哪些消息給 Slave

case class RemoveBlock(blockId: BlockId)

用于移除 slave 上的 block神帅。在以下兩個(gè)時(shí)機(jī)會(huì)觸發(fā):

  • task 結(jié)束時(shí)
  • Spark Streaming 中,清理過期的 batch 對(duì)應(yīng)的 blocks

case class RemoveRdd(rddId: Int)

用于移除歸屬于某個(gè) RDD 的所有 blocks萌抵,觸發(fā)時(shí)機(jī):

  • 釋放緩存的 RDD

case class RemoveShuffle(shuffleId: Int)

用于移除歸屬于某次 shuffle 所有的 blocks找御,觸發(fā)時(shí)機(jī):

  • 做 shuffle 清理的時(shí)候

case class RemoveBroadcast(broadcastId: Long, removeFromDriver: Boolean = true)

用于移除歸屬于特定 Broadcast 的所有 blocks。觸發(fā)時(shí)機(jī):

  • 調(diào)用 Broadcast#destroy 銷毀廣播變量
  • 調(diào)用 Broadcast#unpersist 刪除 executors 上的廣播變量拷貝

接下來看看 Slaves 發(fā)送給 Master 的消息

Slave -> Master

case class RegisterBlockManager(blockManagerId: BlockManagerId ...)

用于 Slave(executor 端 BlockManager) 向 Master(driver 端 BlockManager) 注冊(cè)绍填,觸發(fā)時(shí)機(jī):

  • executor 端 BlockManager 在初始化時(shí)

case class UpdateBlockInfo(var blockManagerId: BlockManagerId, var blockId: BlockId ...)

用于向 Master 匯報(bào)指定 block 的信息霎桅,包括:storageLevel、存儲(chǔ)在內(nèi)存中的 size讨永、存儲(chǔ)在磁盤上的 size滔驶、是否 cached 等。觸發(fā)時(shí)機(jī):

  • BlockManager 注冊(cè)時(shí)
  • block 被移除時(shí)
  • 原本存儲(chǔ)在內(nèi)存中的 block 因內(nèi)存不足而轉(zhuǎn)移到磁盤上時(shí)
  • 生成新的 block 時(shí)

case class GetLocations(blockId: BlockId)

用于獲取指定 blockId 的 block 所在的 BlockManagerId 列表卿闹,觸發(fā)時(shí)機(jī):

  • 檢查是否包含某個(gè) block
  • 以序列化形式讀取本地或遠(yuǎn)程 BlockManagers 上的數(shù)據(jù)時(shí)
    • 讀取以 blocks 形式存儲(chǔ)的 task result 時(shí)
    • 讀取 Broadcast blocks 數(shù)據(jù)時(shí)
    • 獲取指定 block id 對(duì)應(yīng)的 block 數(shù)據(jù)(比如獲取 RDD partition 對(duì)應(yīng)的 block)

case class RemoveExecutor(execId: String)

用于移除已 lost 的 executor 上的 BlockManager(只在 driver 端進(jìn)行操作)揭糕,觸發(fā)時(shí)機(jī):

  • executor lost(一般由于 task 連續(xù)失敗導(dǎo)致)

case object StopBlockManagerMaster

用于停止 driver 或 executor 端的 BlockManager,觸發(fā)時(shí)機(jī):

  • SparkContext#stop 被調(diào)用時(shí)比原,也即 driver 停止時(shí)

case object GetMemoryStatus

用于獲取各個(gè) BlockManager 的內(nèi)存使用情況插佛,包括最大可用內(nèi)存以及當(dāng)前可用內(nèi)存(當(dāng)前可用內(nèi)存=最大可用內(nèi)存-已用內(nèi)存)


case object GetStorageStatus

用于獲取各個(gè) BlockManager 的存儲(chǔ)狀態(tài),包括每個(gè) BlockManager 中都存儲(chǔ)了哪些 RDD 的哪些 block(對(duì)應(yīng) partition)以及各個(gè) block 的信息


case class BlockManagerHeartbeat(blockManagerId: BlockManagerId)

用于 Slave 向 Master 發(fā)心跳信息量窘,以通知 Master 其上的某個(gè) BlockManager 還存活著


case class HasCachedBlocks(executorId: String)

用于檢查 executor 是否有緩存 blocks(廣播變量的 blocks 不作考慮雇寇,因?yàn)閺V播變量的 block 不會(huì)匯報(bào)給 Master),觸發(fā)時(shí)機(jī):

  • 檢驗(yàn)?zāi)硞€(gè) executor 是否閑置了一段時(shí)間蚌铜,即一段時(shí)間內(nèi)沒有運(yùn)行任何 tasks(這樣的 executor 會(huì)慢慢被移除)

歡迎關(guān)注我的微信公眾號(hào):FunnyBigData

FunnyBigData
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末锨侯,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子冬殃,更是在濱河造成了極大的恐慌囚痴,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,284評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件审葬,死亡現(xiàn)場(chǎng)離奇詭異深滚,居然都是意外死亡奕谭,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門痴荐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來血柳,“玉大人,你說我怎么就攤上這事生兆∧寻疲” “怎么了?”我有些...
    開封第一講書人閱讀 164,614評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵鸦难,是天一觀的道長(zhǎng)根吁。 經(jīng)常有香客問我,道長(zhǎng)合蔽,這世上最難降的妖魔是什么击敌? 我笑而不...
    開封第一講書人閱讀 58,671評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮辈末,結(jié)果婚禮上愚争,老公的妹妹穿的比我還像新娘。我一直安慰自己挤聘,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評(píng)論 6 392
  • 文/花漫 我一把揭開白布捅彻。 她就那樣靜靜地躺著组去,像睡著了一般。 火紅的嫁衣襯著肌膚如雪步淹。 梳的紋絲不亂的頭發(fā)上从隆,一...
    開封第一講書人閱讀 51,562評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音缭裆,去河邊找鬼键闺。 笑死,一個(gè)胖子當(dāng)著我的面吹牛澈驼,可吹牛的內(nèi)容都是我干的辛燥。 我是一名探鬼主播,決...
    沈念sama閱讀 40,309評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼缝其,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼挎塌!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起内边,我...
    開封第一講書人閱讀 39,223評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤榴都,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后漠其,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體嘴高,經(jīng)...
    沈念sama閱讀 45,668評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡竿音,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了拴驮。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片春瞬。...
    茶點(diǎn)故事閱讀 39,981評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖莹汤,靈堂內(nèi)的尸體忽然破棺而出快鱼,到底是詐尸還是另有隱情,我是刑警寧澤纲岭,帶...
    沈念sama閱讀 35,705評(píng)論 5 347
  • 正文 年R本政府宣布抹竹,位于F島的核電站,受9級(jí)特大地震影響止潮,放射性物質(zhì)發(fā)生泄漏点把。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評(píng)論 3 330
  • 文/蒙蒙 一谅辣、第九天 我趴在偏房一處隱蔽的房頂上張望漾橙。 院中可真熱鬧,春花似錦燃乍、人聲如沸唆樊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽逗旁。三九已至,卻和暖如春舆瘪,著一層夾襖步出監(jiān)牢的瞬間片效,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評(píng)論 1 270
  • 我被黑心中介騙來泰國打工英古, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留淀衣,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,146評(píng)論 3 370
  • 正文 我出身青樓召调,卻偏偏與公主長(zhǎng)得像膨桥,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子某残,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容