1. 程式人生 > >Spark 面試題收集

Spark 面試題收集

Spark 運算元有哪些,專案用到哪些運算元

Spark 廣播變數

Spark記憶體溢位

Spark OOM問題解決辦法

Spark 任務執行速度傾斜問題解決方案

Spark與Hadoop MapReduce的異同

首先Spark是借鑑了mapreduce並在其基礎上發展起來的,繼承了其分散式計算的優點並改進了mapreduce

明顯的缺陷,但是二者也有不少的差異具體如下:

1、spark把運算的中間資料存放在記憶體,迭代計算效率更高;mapreduce的中間結果需要落地,需要儲存到磁碟,

這樣必然會有磁碟io操做,影響效能。

2、spark容錯性高,它通過彈性分散式資料集RDD來實現高效容錯,RDD是一組分散式的儲存在節點記憶體中的

只讀性質的資料集,這些集合是彈性的,某一部分丟失或者出錯,可以通過整個資料集的計算流程的血緣關係

來實現重建;mapreduce的話容錯可能只能重新計算了,成本較高。

3、spark更加通用,spark提供了transformation和action這兩大類的多個功能api,另外還有流式處理

sparkstreaming模組、圖計算GraphX等等;mapreduce只提供了map和reduce兩種操作,流計算以及其他

模組的支援比較缺乏。

4、spark框架和生態更為複雜,首先有RDD、血緣lineage、執行時的有向無環圖DAG、stage劃分等等,

很多時候spark作業都需要根據不同業務場景的需要進行調優已達到效能要求;mapreduce框架及其生態

相對較為簡單,對效能的要求也相對較弱,但是執行較為穩定,適合長期後臺執行。

最後總結:

spark生態更為豐富,功能更為強大、效能更佳,適用範圍更廣;mapreduce更簡單、穩定性好、適合離線海量資料探勘計算。

Spatk streaming的資料來源

基於offset消費資料

Spark和Hadoop的異同

Spark與hadoop的shuffle有何異同

Spark RDD操作map與flatmap的區別

Spark  RDD的理解

Spark 有哪些運算元

Spark 的stage的理解

Spark 寬依賴和窄依賴

Sparkcore 的廣播變數

Spark 累加變數

Spark 二次排序

Spark reduceByKey和groupByKey區別

reduceByKey用於對每個key對應的多個value進行merge操作,最重要的是它能夠在本地先進行merge操作,並且merge操作可以通過函式自定義。

groupByKey也是對每個key進行操作,但只生成一個sequence。需要特別注意“Note”中的話,它告訴我們:如果需要對sequence進行aggregation操作(注意,groupByKey本身不能自定義操作函式),那麼,選擇reduceByKey/aggregateByKey更好。這是因為groupByKey不能自定義函式,我們需要先用groupByKey生成RDD,然後才能對此RDD通過map進行自定義函式操作。

groupByKey在方法shuffle之間不會合並原樣進行shuffle。reduceByKey進行shuffle之前會先做合併,這樣就減少了shuffle的io傳送,所以效率高一點。

### groupByKey是這樣實現的

combineByKeyWithClassTag[CompactBuffer[V]](createCombiner, mergeValue, mergeCombiners, partitioner, mapSideCombine = false)

### reduceByKey是這樣實現的

combineByKeyWithClassTag[V]((v: V) => v, func, func, partitioner)

對比上面發現,groupByKey設定了mapSideCombine = false,在map端不進行合併,那就是在shuffle前不合並。而reduceByKey沒有設定

通過檢視combineByKeyWithClassTag的,發現reduceByKey預設在map端進行合併,那就是