本篇內(nèi)容介紹了“Spark基礎(chǔ)面試題有哪些”的有關(guān)知識,在實(shí)際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
創(chuàng)新互聯(lián)10多年企業(yè)網(wǎng)站建設(shè)服務(wù);為您提供網(wǎng)站建設(shè),網(wǎng)站制作,網(wǎng)頁設(shè)計(jì)及高端網(wǎng)站定制服務(wù),企業(yè)網(wǎng)站建設(shè)及推廣,對咖啡廳設(shè)計(jì)等多個行業(yè)擁有多年的網(wǎng)站營銷經(jīng)驗(yàn)的網(wǎng)站建設(shè)公司。
兩張圖一起看,左側(cè)圖是簡化版,右側(cè)圖較完整。
YARN-Cluster任務(wù)提交流程:
1 由client向RM提交請求,并上傳jar到HDFS上 ;
2 RM選擇一個NM創(chuàng)建SparkAppMaster(AM),AM啟動Driver(即初始化sc);
3 AM向RM申請資源;
4 RM給AM返回資源列表;
5 AM申請啟動Executor;
6 Executor向AM反向注冊;
Executor反向注冊完成后,AM就會知道自己有哪些資源可以用(Executor),然后就會去執(zhí)行job,拆分stage,提交stage的Task,進(jìn)行Task調(diào)度,分配到Executor上去執(zhí)行;
7 AM分配任務(wù)給Executor執(zhí)行,Executor執(zhí)行任務(wù),并向AM匯報(bào)運(yùn)行的狀態(tài)和進(jìn)度;
8 等到所有的任務(wù)執(zhí)行完畢后,AM 向 RM 申請注銷并關(guān)閉自己,釋放資源 ;
參考鏈接:https://www.jianshu.com/p/e1cf4c58ae35
Yarn模式,Spark客戶端直接連接Yarn,不需要額外構(gòu)建Spark集群。有yarn-client和yarn-cluster兩種模式,區(qū)別如下:
① 主要區(qū)別在于:Driver程序的運(yùn)行節(jié)點(diǎn)
yarn-client:Driver程序運(yùn)行在客戶端(本地),適用于交互、調(diào)試,希望立即看到app的輸出
yarn-cluster:Driver程序運(yùn)行在由RM(ResourceManager)啟動的AP(APPMaster),適用于生產(chǎn)環(huán)境。
② Driver的位置不同導(dǎo)致的性能的差異
Yarn-client的Driver運(yùn)行在本地,通常來說本地機(jī)器和Yarn集群不在同一個機(jī)房,性能不會很好;
yarn-cluster的Driver和Yarn集群運(yùn)行在同一個機(jī)房內(nèi),性能上來說會好一點(diǎn);
參考鏈接:https://www.jianshu.com/p/6f55b8412f03
2.1 未經(jīng)過優(yōu)化的HashShuffleManager
假設(shè)前提:每個Executor只有1個CPU core,也就是說,無論這個Executor上分配多少個task線程,同一時間都只能執(zhí)行一個task線程。
上游的stage的task對相同的key執(zhí)行hash算法,從而將相同的key都寫入到一個磁盤文件中,而每一個磁盤文件都只屬于下游stage的一個task。在將數(shù)據(jù)寫入磁盤之前,會先將數(shù)據(jù)寫入到內(nèi)存緩沖,當(dāng)內(nèi)存緩沖填滿之后,才會溢寫到磁盤文件中。但是這種策略的不足在于,下游有幾個task,上游的每一個task都就都需要創(chuàng)建幾個臨時文件,每個文件中只存儲key取hash之后相同的數(shù)據(jù),導(dǎo)致了當(dāng)下游的task任務(wù)過多的時候,上游會堆積大量的小文件 。
具體的過程分為“寫過程”和“讀過程”,參看上面的鏈接。
2.2 經(jīng)過優(yōu)化的HashShuffleManager
假設(shè)前提:每個Executor只有1個CPU core,也就是說,無論這個Executor上分配多少個task線程,同一時間都只能執(zhí)行一個task線程。
Shuffle Write過程:
開啟consolidate機(jī)制之后,在shuffle write過程中,task就不是為下游stage的每個task創(chuàng)建一個磁盤文件了。此時會出現(xiàn)shuffleFileGroup的概念,每個shuffleFileGroup會對應(yīng)一批磁盤文件,磁盤文件的數(shù)量與下游stage的task數(shù)量是相同的。一個Executor上有多少個CPU core,就可以并行執(zhí)行多少個task。而第一批并行執(zhí)行的每個task都會創(chuàng)建一個shuffleFileGroup,并將數(shù)據(jù)寫入對應(yīng)的磁盤文件內(nèi)。
當(dāng)Executor的CPU core執(zhí)行完一批task,接著執(zhí)行下一批task時,下一批task就會復(fù)用之前已有的shuffleFileGroup,包括其中的磁盤文件。也就是說,此時task會將數(shù)據(jù)寫入已有的磁盤文件中,而不會寫入新的磁盤文件中。因此,consolidate機(jī)制允許不同的task復(fù)用同一批磁盤文件,這樣就可以有效將多個task的磁盤文件進(jìn)行一定程度上的合并,從而大幅度減少磁盤文件的數(shù)量,進(jìn)而提升shuffle write的性能。
Shuffle Read過程:
和未優(yōu)化之前的Shuffle Read過程相同。
SortShuffleManager的運(yùn)行機(jī)制主要分成兩種,一種是普通運(yùn)行機(jī)制,另一種是bypass運(yùn)行機(jī)制。當(dāng)shuffle read task的數(shù)量小于等于spark.shuffle.sort.bypassMergeThreshold參數(shù)的值時(默認(rèn)為200),就會啟用bypass機(jī)制。
2.3 SortShuffleManager普通運(yùn)行機(jī)制
Shuffle Write過程:
在該模式下,數(shù)據(jù)會先寫入一個內(nèi)存數(shù)據(jù)結(jié)構(gòu)中,此時根據(jù)不同的shuffle算子,可能選用不同的數(shù)據(jù)結(jié)構(gòu)。如果是reduceByKey這種聚合類的shuffle算子,那么會選用Map數(shù)據(jù)結(jié)構(gòu),一邊通過Map進(jìn)行聚合,一邊寫入內(nèi)存;如果是join這種普通的shuffle算子,那么會選用Array數(shù)據(jù)結(jié)構(gòu),直接寫入內(nèi)存。接著,每寫一條數(shù)據(jù)進(jìn)入內(nèi)存數(shù)據(jù)結(jié)構(gòu)之后,就會判斷一下,是否達(dá)到了某個臨界閾值。如果達(dá)到臨界閾值的話,那么就會嘗試將內(nèi)存數(shù)據(jù)結(jié)構(gòu)中的數(shù)據(jù)溢寫到磁盤,然后清空內(nèi)存數(shù)據(jù)結(jié)構(gòu)。
在溢寫到磁盤文件之前,會先根據(jù)key對內(nèi)存數(shù)據(jù)結(jié)構(gòu)中已有的數(shù)據(jù)進(jìn)行排序。排序過后,會分批將數(shù)據(jù)寫入磁盤文件。默認(rèn)的batch數(shù)量是10000條,也就是說,排序好的數(shù)據(jù),會以每批1萬條數(shù)據(jù)的形式分批寫入磁盤文件。寫入磁盤文件是通過Java的BufferedOutputStream實(shí)現(xiàn)的。BufferedOutputStream是Java的緩沖輸出流,首先會將數(shù)據(jù)緩沖在內(nèi)存中,當(dāng)內(nèi)存緩沖滿溢之后再一次寫入磁盤文件中,這樣可以減少磁盤IO次數(shù),提升性能。
一個task將所有數(shù)據(jù)寫入內(nèi)存數(shù)據(jù)結(jié)構(gòu)的過程中,會發(fā)生多次磁盤溢寫操作,也就會產(chǎn)生多個臨時文件。最后會將之前所有的臨時磁盤文件都進(jìn)行合并,這就是merge過程,此時會將之前所有臨時磁盤文件中的數(shù)據(jù)讀取出來,然后依次寫入最終的磁盤文件之中。此外,由于一個task就只對應(yīng)一個磁盤文件,也就意味著該task為下游stage的task準(zhǔn)備的數(shù)據(jù)都在這一個文件中,因此還會單獨(dú)寫一份索引文件,其中標(biāo)識了下游各個task的數(shù)據(jù)在文件中的start offset與end offset。
產(chǎn)生中間文件數(shù)量:SortShuffleManager由于有一個磁盤文件merge的過程,因此大大減少了文件數(shù)量。比如第一個stage有50個task,總共有10個Executor,每個Executor執(zhí)行5個task,而第二個stage有100個task。由于每個task最終只有一個磁盤文件,因此此時每個Executor上只有5個磁盤文件,所有Executor只有50個磁盤文件。
2.4 SortShuffleManager的bypass機(jī)制
Shuffle Write過程:
此時task會為每個下游task都創(chuàng)建一個臨時磁盤文件,并將數(shù)據(jù)按key進(jìn)行hash然后根據(jù)key的hash值,將key寫入對應(yīng)的磁盤文件之中。當(dāng)然,寫入磁盤文件時也是先寫入內(nèi)存緩沖,緩沖寫滿之后再溢寫到磁盤文件的。最后,同樣會將所有臨時磁盤文件都合并成一個磁盤文件,并創(chuàng)建一個單獨(dú)的索引文件。
該過程的磁盤寫機(jī)制其實(shí)跟未經(jīng)優(yōu)化的HashShuffleManager是一模一樣的,因?yàn)槎家獎?chuàng)建數(shù)量驚人的磁盤文件,只是在最后會做一個磁盤文件的合并而已。因此少量的最終磁盤文件,也讓該機(jī)制相對未經(jīng)優(yōu)化的HashShuffleManager來說,shuffle read的性能會更好。
而該機(jī)制與普通SortShuffleManager運(yùn)行機(jī)制的不同在于:第一,磁盤寫機(jī)制不同;第二,不會進(jìn)行排序。也就是說,啟用該機(jī)制的最大好處在于,shuffle write過程中,不需要進(jìn)行數(shù)據(jù)的排序操作,也就節(jié)省掉了這部分的性能開銷。
“Spark基礎(chǔ)面試題有哪些”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!
網(wǎng)頁題目:Spark基礎(chǔ)面試題有哪些
分享地址:http://aaarwkj.com/article12/peepdc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供自適應(yīng)網(wǎng)站、移動網(wǎng)站建設(shè)、Google、品牌網(wǎng)站設(shè)計(jì)、搜索引擎優(yōu)化、動態(tài)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)