Spark SQL內核剖析(三)

本文參考了《Spark SQL內核剖析》(朱峯、張韶全、黃明等著)的目錄結構和內容,這本書主要集中在對SQL內核實現的剖析上,從源碼實現上學習分佈式計算和數據庫領域的相關技術,非常值得有相關需求的專業人士學習和購買。我寫這篇文章的目的也是基於此學習Spark SQL以及分享一些自己的理解。

什麼是Spark SQL?

Spark SQL是近年來SQL-on-Hadoop解決方案(包括Hive、Presto和Impala等)中的佼佼者,結合了數據庫SQL處理和Spark分佈式計算模型兩個方面的技術,目標是取代傳統的數據倉庫。

上一部分 Spark SQL內核剖析—學習(二)介紹了Spark SQL 編譯器 Parser的實現方式以及Spark SQL邏輯算子樹生成、分析和優化流程的技術原理和實現方式。本部分將介紹Spark SQL 物理計劃的處理流程。

5. Spark SQL 物理計劃(PhysicalPlan)

物理計劃階段是Spark SQL整個查詢處理流程的最後一步,在此階段Spark SQL會對生成的邏輯算子樹進行進一步處理,得到物理算子樹,並將LogicalPlan節點及其包含的各種信息映射成Spark Core計算模型的元素,如RDD、Transformation和Action等,以支持其提交執行。

5.1. 物理計劃概述

物理計劃可分爲三個階段,這三個階段分別產生Iterator[PhysicalPlan]、SparkPlan和Prepared SparkPlan,其中Prepared SparkPlan可以直接提交併執行(這裏的SparkPlan和PhysicalPlan均表示物理計劃)。具體來講,這三個階段的工作分別如下:

  1. 有SparkPlanner將各種物理計劃策略(Strategy)作用於對應的LogicalPlan節點上,生成SparkPlan列表(一個LogicalPlan可能生成多種SparkPlan)。
  2. 選取最佳的SparkPlan,在Spark2.10版本直接用next()獲取第一個。
  3. 提交前準備工作,進行分區排序處理,確保SparkPlan各節點能夠正確執行,這一步通過PrepareForExecution()方法調用若干規則(Rule)進行轉換。

5.2. SparkPlan

在物理算子樹中,葉子類型的SparkPlan節點負責創建RDD,每個非葉子類型的SparkPlan節點等價於在RDD上進行一次Transformation,即通過調用execute()函數轉換新的RDD,最終執行collect()操作觸發計算操作,返回結果給用戶。此外,SparkPlan還有可能對RDD的分區做調整,直接調用executeBroadcast方法,將數據廣播到集羣上。

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