第7章 Spark SQL 的運行原理(了解)


7Spark SQL 的運行原理(了解)

7.1 Spark SQL運行架構

  Spark SQLSQL語句的處理和關系型數據庫類似,即詞法/語法解析、綁定、優化、執行。Spark SQL會先將SQL語句解析成一棵樹,然后使用規則(Rule)Tree進行綁定、優化等處理過程。Spark SQLCoreCatalystHiveHive-ThriftServer四部分構成:

  Core: 負責處理數據的輸入和輸出,如獲取數據,查詢結果輸出成DataFrame

  Catalyst: 負責處理整個查詢過程,包括解析、綁定、優化等

  Hive: 負責對Hive數據進行處理

  Hive-ThriftServer: 主要用於對hive的訪問

 

7.1.1 TreeNode

  邏輯計划、表達式等都可以用tree來表示,它只是在內存中維護,並不會進行磁盤的持久化,分析器和優化器對樹的修改只是替換已有節點。

  TreeNode2個直接子類,QueryPlanExpressionQueryPlam下又有LogicalPlanSparkPlan. Expression是表達式體系,不需要執行引擎計算而是可以直接處理或者計算的節點,包括投影操作,操作符運算

7.1.2 Rule & RuleExecutor

  Rule就是指對邏輯計划要應用的規則,以到達綁定和優化。他的實現類就是RuleExecutor。優化器和分析器都需要繼承RuleExecutor。每一個子類中都會定義BatchOnceFixPoint. 其中每一個Batch代表着一套規則,Once表示對樹進行一次操作,FixPoint表示對樹進行多次的迭代操作。RuleExecutor內部提供一個Seq[Batch]屬性,里面定義的是RuleExecutor的處理邏輯,具體的處理邏輯由具體的Rule子類實現。

整個流程架構圖:

 

7.2 Spark SQL運行原理

7.2.1 使用SessionCatalog保存元數據

  在解析SQL語句之前,會創建SparkSession,或者如果是2.0之前的版本初始化SQLContextSparkSession只是封裝了SparkContextSQLContext的創建而已。會把元數據保存在SessionCatalog中,涉及到表名,字段名稱和字段類型。創建臨時表或者視圖,其實就會往SessionCatalog注冊

7.2.2 解析SQL,使用ANTLR生成未綁定的邏輯計划

  當調用SparkSessionsql或者SQLContextsql方法,我們以2.0為准,就會使用SparkSqlParser進行解析SQL. 使用的ANTLR進行詞法解析和語法解析。它分為2個步驟來生成Unresolved LogicalPlan

  # 詞法分析:Lexical Analysis,負責將token分組成符號類

  # 構建一個分析樹或者語法樹AST

7.2.3 使用分析器Analyzer綁定邏輯計划

  在該階段,Analyzer會使用Analyzer Rules,並結合SessionCatalog,對未綁定的邏輯計划進行解析,生成已綁定的邏輯計划。

7.2.3 使用優化器Optimizer優化邏輯計划

  優化器也是會定義一套Rules,利用這些Rule對邏輯計划和Exepression進行迭代處理,從而使得樹的節點進行和並和優化

7.2.4 使用SparkPlanner生成物理計划

  SparkSpanner使用Planning Strategies,對優化后的邏輯計划進行轉換,生成可以執行的物理計划SparkPlan.

7.2.5 使用QueryExecution執行物理計划

  此時調用SparkPlanexecute方法,底層其實已經再觸發JOB了,然后返回RDD


免責聲明!

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



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