========= 基礎 =========
1、RDD 的 基礎
https://www.jianshu.com/p/fca10efd2315
https://www.jianshu.com/p/6319d6239f03
https://www.jianshu.com/p/64ade88f0e19
https://blog.csdn.net/weixin_38750084/article/details/82955062
源碼
https://github.com/apache/spark/blob/master/core/src/main/scala/org/apache/spark/rdd/RDD.scala
2、driver的功能是什麼?
一個程序,它聲明數據的RDD上的轉換和操作,並將這些請求提交給master
功能
1)、創建SparkContext的程序,連接到給定的SparkMaster
2)、劃分rdd stage 並生成 DAGScheduler
3)、通過taskScheduler生成併發送task到executor
它的位置獨立於master、slave。您在master節點,也可以從另一個節點運行它。唯一的要求是它必須在一個可以從Spark Workers訪問的網絡中
2、RDD寬依賴和窄依賴?
- wide dependency or shuffle dependency:多個子RDD的Partition會依賴同一個父RDD的Partition
- narrow dependency:每一個父RDD的Partition最多被子RDD的一個Partition使用
3、map 和 flatMap、mapPartition 的區別?
map:通過向這個RDD的所有元素應用一個函數來返回一個新的RDD。
flatMap:返回一個新的RDD 首將一個函數應用於該RDD的所有元素,然後將結果展平。
mapPartitions:通過向這個RDD的每個分區應用一個函數來返回一個新的RDD,preservespartitioning 指示輸入函數是否保留分區器,默認爲false,除非這是pairRDD,並且輸入函數不修改keys
4、spark中的RDD是什麼?有哪些特性?
RDD是彈性分佈式數據集 不可變的可並行操作的元素的分區集合
每個RDD具有五個主要特性:
1)、有分區列表
2)、可用於計算每個分區的函數
3)、依賴於其他RDD的列表
4)、可選pairRDD的分區器(例如說RDD是哈希分區的)
5)、優先選擇本地最優的位置去計算每個分片(例如,HDFS文件塊位置)即數據的本地性
5、spark中如何劃分 stage
stage是一組並行任務,作爲job的部分 計算相同的函數
stage通過是否存在Shuffle或者寬依賴爲邊界來劃分的 如遇到reduceByKey,groupByKey的算子等算子
從當前job的最後一個算子往前推,遇到寬依賴,那麼當前在這個批次中的所有算子操作都劃分成一個stage,然後繼續按照這種方式在繼續往前推,如在遇到寬依賴,又劃分成一個stage,一直到最前面的一個算子。最後整個job會被劃分成多個stage,而stage之間又存在依賴關係,後面的stage依賴於前面的stage
========= 進階 =========
1、Spark 優化方式
2、Spark 如何防止 OOM
3、Hadoop 和 Spark 的 shuffle有什麼區別
shuffle 是洗牌過程,將數據打亂,然後按照用戶的指示輸出。
4、Spark 爲什麼要持久化?哪些場景需要 persist
持久化是 control 操作,中間結果比較難算出來,而且還需要複用。
比如機器學習
5、什麼是 Transformation 和 action
按需執行的函數。
6、Spark 作業執行原理
7、spark Job 調度流程
8、減少 Spark IO
廣播變量、累加器、減少Shuffle
9、一致性語義有幾個級別
10、CAP 理論
11、Spark-submit --files 和 addFile 的區別
12、spark 如何跳過 失敗的 task