1、sparkSql處理核心:Catalyst工作流程(本質:把sql、dataframe相結合,以樹tree的形式來存儲、優化)
2、catalyst工作流程
1)Parser(解析器):SqlParser生成LogicPlan Tree
主要是先進行詞法分析,再進行語法非分析
詞法分析:將輸入的sql語句串解析為一個一個的token
語法分析:在詞法分析的基礎上,將單詞序列組合成各類語法短語,組成各個LogicPlan
2)Analyser:遍歷整個語法樹,對樹上的每個節點進行數據類型綁定以及函數綁定。
根據元數據表解析為包含必要列的表,並且相應字段解析為相應的數據類型,相應的計算邏輯解析為對應的函數。
3)Optimizer:是Catalyst的核心
基於規則優化實際上對語法樹再做一次遍歷,模式匹配能夠滿足特定細節的節點,再進行相應的等價變換
經典規則:謂詞下推、常量累加、和列值裁剪
4)Physical Planning:物理計划層
用物理操作算子產生一個或者多個物理計划。然后用cost模型選擇一個物理計划。目前基於 cost-based的優化僅僅用於選擇join算法。
對已知的很小的relations,sparksql會選擇使用Spark 的提供的點對點的廣播功能實現 Broadcast join。
3、內存管理 Tungsten 內存管理器-- off-heap
本質:突破JVM內存管理限制,分配堆外內存。
JVM:GC帶來時間開銷,可能出現“假死” 情況