溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Spark的failover容錯(cuò)機(jī)制是什么

發(fā)布時(shí)間:2021-12-16 13:46:56 來源:億速云 閱讀:288 作者:iii 欄目:大數(shù)據(jù)

這篇文章主要介紹“Spark的failover容錯(cuò)機(jī)制是什么”,在日常操作中,相信很多人在Spark的failover容錯(cuò)機(jī)制是什么問題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”Spark的failover容錯(cuò)機(jī)制是什么”的疑惑有所幫助!接下來,請(qǐng)跟著小編一起來學(xué)習(xí)吧!

SPARK計(jì)算框架使用3種方式來實(shí)現(xiàn)整體的failover機(jī)制:  

1.   driver端的checkpoint
在Driver層實(shí)現(xiàn), 用于在Driver崩潰后,  恢復(fù)Driver的現(xiàn)場(chǎng)  ;  
(注意,這個(gè)checkpoint和RDD的checkpoint是兩碼事)

2.  executor端的replication
在Receiver中用于  解決單臺(tái)executor掛掉后,未保存的數(shù)據(jù)丟失的問題。
3.  WAL: 在Driver和Receiver中實(shí)現(xiàn),用于解決:
(1) Driver掛掉,所有executor都會(huì)掛掉,那么所有未保存的數(shù)據(jù)都丟掉了,replication就不管用了;(  數(shù)據(jù)不丟失的問題)
(2) Driver掛掉后,  哪些block在掛掉前注冊(cè)到了driver中,以及掛掉前哪些block分配給了當(dāng)時(shí)正在運(yùn)行的batch job, 這些信息就都丟失了;所以需要WAL對(duì)這些信息做持久化。(  任務(wù)分配的問題)
如果你覺得說的還不夠過癮,可以畫個(gè)圖繼續(xù)說  
Spark的failover容錯(cuò)機(jī)制是什么
  1. 藍(lán)色的箭頭表示讀取數(shù)據(jù),存儲(chǔ)在executor的內(nèi)存中,如果開啟了WAL,將會(huì)把數(shù)據(jù)寫入到存在容錯(cuò)文件系統(tǒng)的日志文件中(executor端的wal)


  2. 青色的箭頭表示提醒driver, 接收到的數(shù)據(jù)塊的元信息發(fā)送給driver中的SparkContext, 這些元數(shù)據(jù)包括:executor內(nèi)存中數(shù)據(jù)塊的引用ID和日志文件中數(shù)據(jù)塊的偏移信息(driver端的wal)


  3. 黃色箭頭表示checkpoint這些計(jì)算,用于重現(xiàn)driver現(xiàn)場(chǎng)。流式處理會(huì)周期的被checkpoint到文件中(driver端的checkpoint)


說到這里,恭喜你,能夠把面試官說懵了。  

Spark的RDD的五大特性是什么?
這個(gè)問題能把很多人問懵逼,其實(shí)這個(gè)五大特性的說法是在Spark的源碼里的一段注釋,如下:  
Spark的failover容錯(cuò)機(jī)制是什么

我簡(jiǎn)單解釋下:

1. partition  
partition是數(shù)據(jù)集的基本組成單位,每個(gè)分片都會(huì)被一個(gè)計(jì)算任務(wù)處理,決定并行計(jì)算的粒度。分片數(shù)默認(rèn)是core的數(shù)量。

每個(gè)分片的存儲(chǔ)是由BlockManager實(shí)現(xiàn)的,每個(gè)分區(qū)都會(huì)被邏輯映射成BlockManager的一個(gè)Block,而這個(gè)Block會(huì)被一個(gè)Task負(fù)責(zé)計(jì)算。
2. partitioner
一個(gè)partitioner,即RDD的分片函數(shù)。當(dāng)前Spark中實(shí)現(xiàn)了兩種類型的分片函數(shù),一個(gè)是基于哈希的HashPartitioner,另外一個(gè)基于范圍的RangePartitioner。
只有對(duì)于key-value的RDD,才會(huì)有Partitioner。Partitioner函數(shù)不但決定了RDD本身的分片數(shù)量,也決定了parent RDD Shuffle輸出時(shí)的分片數(shù)量。 
3. compute func
Spark中的RDD的計(jì)算是以分片為單位的,每個(gè)RDD都會(huì)實(shí)現(xiàn)compute函數(shù)以達(dá)到這個(gè)目的。compute函數(shù)會(huì)對(duì)迭代器進(jìn)行復(fù)合,不需要保存每次計(jì)算的結(jié)果。
4. dependency
RDD的每次轉(zhuǎn)換都會(huì)生成一個(gè)新的RDD,所以RDD之間就會(huì)形成類似于流水線一樣的前后依賴關(guān)系。

在部分分區(qū)數(shù)據(jù)丟失時(shí),Spark可以通過這個(gè)依賴關(guān)系重新計(jì)算丟失的分區(qū)數(shù)據(jù),而不是對(duì)RDD的所有分區(qū)進(jìn)行重新計(jì)算。
5. preferredLocation
一個(gè)列表,存儲(chǔ)存取每個(gè)Partition的優(yōu)先位置(preferred location),對(duì)于一個(gè)HDFS文件來說,這個(gè)列表保存的就是每個(gè)Partition所在的塊的位置。
按照“移動(dòng)數(shù)據(jù)不如移動(dòng)計(jì)算”的理念,Spark在進(jìn)行任務(wù)調(diào)度的時(shí)候,會(huì)盡可能地將計(jì)算任務(wù)分配到其所要處理數(shù)據(jù)塊的存儲(chǔ)位置。

到此,關(guān)于“Spark的failover容錯(cuò)機(jī)制是什么”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI