spark 源碼簡單分析
sparksql 作爲spark1.0所支持的lib庫中唯一新增加的lib庫,可見其重要地位。
分析內容:
- spark sql執行流程;
- hive on spark 和 hive on hadoop 的比較;
-
spark sql執行流程分析
首先我們來分析下sql的通用執行過程:
比如說: select n1,n2,n3 from tableN where n1 = ?
其中n1,n2,n3 是需要返回的結果,tableN 是數據源,n1=? 是查詢條件。
sql 語句分析執行過程的步驟:
- 語法解析;
- 操作bind;
- 優化策略;
- 執行。
語法解析完成會形成一顆語法樹,樹中的每個節點便是執行的規則,整個樹就是執行策略。
而接下來要解讀的是sql on spark,無可厚非,也是要完成解析,優化,執行三大過程。
- sqlParser 生成邏輯計劃樹;
- 解析器和優化器在多個rule的基礎上作用於邏輯計劃樹上;
- 由優化後的邏輯計劃生成物理計劃;
- 生成sparkRDD;
- spark執行RDD。
一般sparksql這種新特性會引入sqlContext和schemaRDD。 -
hive on spark 和 hive on hadoop
hiveQL 執行過程:
- 將sql解析爲語法樹;
- 語義分析;
- 生成邏輯計劃;
- 生成查詢計劃;
- 優化器。
- 生成mapreduce的job。
在spark中提供了hiveContext接口,而hiveContext繼承自sqlContext。
而hive中涉及到兩種數據:
- schema data 數據庫的定義和表結構,存儲在metastore中;
- Row data 分析的文件本身。持續更新和修改中…