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端進行合併,那就是