Spark SQL的運行原理

DataFrame、DataSet 和 Spark SQL 的實際執行流程都是相同的:

1.進行 DataFrame/Dataset/SQL 編程;
2.如果是有效的代碼,即代碼沒有編譯錯誤,Spark 會將其轉換爲一個邏輯計劃;
3.Spark 將此邏輯計劃轉換爲物理計劃,同時進行代碼優化;
4.Spark 然後在集羣上執行這個物理計劃 (基於 RDD 操作) 。

 

4.1 邏輯計劃(Logical Plan)

執行的第一個階段是將用戶代碼轉換成一個邏輯計劃。它首先將用戶代碼轉換成 unresolved logical plan(未解決的邏輯計劃),之所以這個計劃是未解決的,是因爲儘管您的代碼在語法上是正確的,但是它引用的表或列可能不存在。 Spark 使用 analyzer(分析器) 基於 catalog(存儲的所有表和 DataFrames 的信息) 進行解析。解析失敗則拒絕執行,解析成功則將結果傳給 Catalyst 優化器 (Catalyst Optimizer),優化器是一組規則的集合,用於優化邏輯計劃,通過謂詞下推等方式進行優化,最終輸出優化後的邏輯執行計劃

 

4.2 物理計劃(Physical Plan)

得到優化後的邏輯計劃後,Spark 就開始了物理計劃過程。 它通過生成不同的物理執行策略,並通過成本模型來比較它們,從而選擇一個最優的物理計劃在集羣上面執行的。物理規劃的輸出結果是一系列的 RDDs 和轉換關係 (transformations)。

4.3 執行

在選擇一個物理計劃後,Spark 運行其 RDDs 代碼,並在運行時執行進一步的優化,生成本地 Java 字節碼,最後將運行結果返回給用戶。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章