Spark面試題整理(三)

大資料技術派發表於2021-10-30

1、為什麼要進行序列化序列化?

可以減少資料的體積,減少儲存空間,高效儲存和傳輸資料,不好的是使用的時候要反序列化,非常消耗CPU。

2、Yarn中的container是由誰負責銷燬的,在Hadoop Mapreduce中container可以複用麼?

ApplicationMaster負責銷燬,在Hadoop Mapreduce不可以複用,在spark on yarn程式container可以複用。

3、提交任務時,如何指定Spark Application的執行模式?

1)cluster模式:./spark-submit --class xx.xx.xx --master yarn --deploy-mode cluster xx.jar
2)client模式:./spark-submit --class xx.xx.xx --master yarn --deploy-mode client xx.jar

4、不啟動Spark叢集Master和work服務,可不可以執行Spark程式?

可以,只要資源管理器第三方管理就可以,如由yarn管理,spark叢集不啟動也可以使用spark;spark叢集啟動的是work和master,這個其實就是資源管理框架,
yarn中的resourceManager相當於master,NodeManager相當於worker,做計算是Executor,和spark叢集的work和manager可以沒關係,歸根接底還是JVM的執行,
只要所在的JVM上安裝了spark就可以。

5、spark on yarn Cluster 模式下,ApplicationMaster和driver是在同一個程式麼?

是,driver 位於ApplicationMaster程式中。該程式負責申請資源,還負責監控程式、資源的動態情況。

6、執行在yarn中Application有幾種型別的container?

1)執行ApplicationMaster的Container:這是由ResourceManager(向內部的資源排程器)申請和啟動的,使用者提交應用程式時,
可指定唯一的ApplicationMaster所需的資源;
2)執行各類任務的Container:這是由ApplicationMaster向ResourceManager申請的,並由ApplicationMaster與NodeManager通訊以啟動之。

7、Executor啟動時,資源通過哪幾個引數指定?

1)num-executors是executor的數量
2)executor-memory 是每個executor使用的記憶體
3)executor-cores 是每個executor分配的CPU

8、為什麼會產生yarn,解決了什麼問題,有什麼優勢?

1)為什麼產生yarn,針對MRV1的各種缺陷提出來的資源管理框架
2)解決了什麼問題,有什麼優勢,參考這篇博文:http://www.aboutyun.com/forum.php?mod=viewthread&tid=6785

9、一個task的map數量由誰來決定?

一般情況下,在輸入源是檔案的時候,一個task的map數量由splitSize來決定的
那麼splitSize是由以下幾個來決定的
goalSize = totalSize / mapred.map.tasks
inSize = max {mapred.min.split.size, minSplitSize}
splitSize = max (minSize, min(goalSize, dfs.block.size))
一個task的reduce數量,由partition決定。

10、列出你所知道的排程器,說明其工作原理?

1)FiFo schedular 預設的排程器 先進先出
2)Capacity schedular 計算能力排程器 選擇佔用記憶體小 優先順序高的
3)Fair schedular 排程器 公平排程器 所有job 佔用相同資源

11、導致Executor產生FULL gc 的原因,可能導致什麼問題?

可能導致Executor僵死問題,海量資料的shuffle和資料傾斜等都可能導致full gc。以shuffle為例,伴隨著大量的Shuffle寫操作,JVM的新生代不斷GC,
Eden Space寫滿了就往Survivor Space寫,同時超過一定大小的資料會直接寫到老生代,當新生代寫滿了之後,也會把老的資料搞到老生代,如果老生代空間不足了,
就觸發FULL GC,還是空間不夠,那就OOM錯誤了,此時執行緒被Blocked,導致整個Executor處理資料的程式被卡住。

12、Spark累加器有哪些特點?

1)累加器在全域性唯一的,只增不減,記錄全域性叢集的唯一狀態;
2)在exe中修改它,在driver讀取;
3)executor級別共享的,廣播變數是task級別的共享兩個application不可以共享累加器,但是同一個app不同的job可以共享。

13、spark hashParitioner的弊端是什麼?

HashPartitioner分割槽的原理很簡單,對於給定的key,計算其hashCode,併除於分割槽的個數取餘,如果餘數小於0,則用餘數+分割槽的個數,最後返回的值就是
這個key所屬的分割槽ID;弊端是資料不均勻,容易導致資料傾斜,極端情況下某幾個分割槽會擁有rdd的所有資料。

14、RangePartitioner分割槽的原理?

RangePartitioner分割槽則儘量保證每個分割槽中資料量的均勻,而且分割槽與分割槽之間是有序的,也就是說一個分割槽中的元素肯定都是比另一個分割槽內的元素小
或者大;但是分割槽內的元素是不能保證順序的。簡單的說就是將一定範圍內的數對映到某一個分割槽內。其原理是水塘抽樣。

15、rangePartioner分割槽器特點?

rangePartioner儘量保證每個分割槽中資料量的均勻,而且分割槽與分割槽之間是有序的,一個分割槽中的元素肯定都是比另一個分割槽內的元素小或者大;
但是分割槽內的元素是不能保證順序的。簡單的說就是將一定範圍內的數對映到某一個分割槽內。RangePartitioner作用:將一定範圍內的數對映到某一個分割槽內,
在實現中,分界的演算法尤為重要。演算法對應的函式是rangeBounds。

16、如何理解Standalone模式下,Spark資源分配是粗粒度的?

spark預設情況下資源分配是粗粒度的,也就是說程式在提交時就分配好資源,後面執行的時候使用分配好的資源,除非資源出現了故障才會重新分配。
比如Spark shell啟動,已提交,一註冊,哪怕沒有任務,worker都會分配資源給executor。

17、union操作是產生寬依賴還是窄依賴?

產生窄依賴。

18、窄依賴父RDD的partition和子RDD的parition是不是都是一對一的關係?

不一定,除了一對一的窄依賴,還包含一對固定個數的窄依賴(就是對父RDD的依賴的Partition的數量不會隨著RDD數量規模的改變而改變),
比如join操作的每個partiion僅僅和已知的partition進行join,這個join操作是窄依賴,依賴固定數量的父rdd,因為是確定的partition關係。

19、Hadoop中,Mapreduce操作的mapper和reducer階段相當於spark中的哪幾個運算元?

相當於spark中的map運算元和reduceByKey運算元,當然還是有點區別的,MR會自動進行排序的,spark要看你用的是什麼partitioner。

20、什麼是shuffle,以及為什麼需要shuffle?

shuffle中文翻譯為洗牌,需要shuffle的原因是:某種具有共同特徵的資料匯聚到一個計算節點上進行計算。

相關文章