1. 程式人生 > >Spark SQL與Hive的關係

Spark SQL與Hive的關係

Shark為了實現Hive相容,在HQL方面重用了Hive中HQL的解析、邏輯執行計劃翻譯、執行計劃優化等邏輯,可以近似認為僅將物理執行計劃從MR作業替換成了Spark作業(輔以記憶體列式儲存等各種和Hive關係不大的優化);

 同時還依賴Hive Metastore和Hive SerDe(用於相容現有的各種Hive儲存格式)。

這一策略導致了兩個問題, 

第一是執行計劃優化完全依賴於Hive,不方便新增新的優化策略; 

二是因為MR是程序級並行,寫程式碼的時候不是很注意執行緒安全問題,導致Shark不得不使用另外一套獨立維護的打了補丁的Hive原始碼分支(至於為何相關修改沒有合併到Hive主線,我也不太清楚)。   

Spark SQL解決了這兩個問題。

第一,Spark SQL在Hive相容層面僅依賴HQL parser、Hive Metastore和Hive SerDe。

也就是說,從HQL被解析成抽象語法樹(AST)起,就全部由Spark SQL接管了。

執行計劃生成和優化都由Catalyst負責。

藉助Scala的模式匹配等函式式語言特性,利用Catalyst開發執行計劃優化策略比Hive要簡潔得多。