Spark SQL概念學習系列之Spark SQL基本原理


 

 

 

Spark SQL基本原理

  1、Spark SQL模塊划分

  2、Spark SQL架構--catalyst設計圖

  3、Spark SQL運行架構

  4、Hive兼容性

 

 

 

 

 

   1、Spark SQL模塊划分

            

        

    Spark SQL模塊划分為Core、caralyst、hive和hive- ThriftServer四大模塊。

      

  Spark SQL依然是讀取數據進去,然后你可以執行sql操作,然后你還可以執行其他的結構化操作,不光僅僅是只能sql操作哈!這一點,很多人都沒理解到位。

也有數據的輸入和輸出的工作。

  比如,Spark SQL模塊里的core模塊,就是為了處理數據的輸入輸出。將查詢結果輸出成DataFrame。具體見上圖。

       Spark SQL模塊里的catalyst模塊。具體見上圖。

       Spark SQL模塊里的hive模塊,對hive數據的處理。具體見上圖。

       Spark SQL模塊里的hive -ThriftServer模塊,具體見上圖。

 

 

 

 

 

 

 

 

  2、Spark SQL架構--catalyst設計圖(這里說Spark SQL模塊里的catalyst模塊!!)

          

    注意:圖中的虛線部分是現在未實現或實現不完善的。

  其中虛線部分是以后版本要實現的功能,實線部分是已經實現的功能。從上圖看,catalyst主要的實現組件有:

   sqlParse,完成sql語句的語法解析功能,目前只提供了一個簡單的sql解析器;

   Analyzer,主要完成綁定工作,將不同來源的Unresolved LogicalPlan和元數據(如hive metastore、Schema catalog)進行綁定,生成resolved LogicalPlan;

  optimizer,對resolvedLogicalPlan進行優化,生成optimizedLogicalPlan(OptimizationRules,對resolvedLogicalPlan進行合並、列裁剪、過濾器下推等優化作業而轉換成optimized LogicalPlan);

   Planner,將LogicalPlan轉換成PhysicalPlan;

  CostModel,主要根據過去的性能統計數據,選擇最佳的物理執行計划。

 

 

 

 

 

 

 

 

  3、Spark SQL運行架構

  類似於關系型數據庫,SparkSQL也是語句也是由Projection(a1,a2,a3)、DataSource(tableA)、Filter(condition)組成,分別對應sql查詢過程中的Result、Data Source、Operation,也就是說SQL語句按Result-->Data Source-->Operation的次序來描述的。

            

  執行SparkSQL語句順序為:

   1.對讀入的SQL語句進行解析(Parse),分辨出SQL語句中哪些詞是關鍵詞(如SELECT、FROM、WHERE),哪些是表達式、哪些是Projection、哪些是Data Source等,從而判斷SQL語句是否規范;

   2.將SQL語句和數據庫的數據字典(列、表、視圖等等)進行綁定(Bind),如果相關的Projection、DataSource等都是存在的話,就表示這個SQL語句是可以執行的;

   3.一般的數據庫會提供幾個執行計划,這些計划一般都有運行統計數據,數據庫會在這些計划中選擇一個最優計划(Optimize);

   4.計划執行(Execute),按Operation-->DataSource-->Result的次序來進行的,在執行過程有時候甚至不需要讀取物理表就可以返回結果,比如重新運行剛運行過的SQL語句,可能直接從數據庫的緩沖池中獲取返回結果。

 

 

 

 

 

 

  4、Hive兼容性

    支持使用hql來寫查詢語句

    兼容metastore

    使用Hive的SerDes

     對UDFs, UDAFs, UDTFs作了封裝。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM