在2014年7月1日的Spark Summit上,Databricks宣布終止對Shark的開發,將重點放到Spark SQL上。Databricks表示,Spark SQL將涵蓋Shark的所有特性,用戶可以從Shark 0.9進行無縫的升級。
本次Databricks推廣的Shark相關項目一共有兩個,分別是Spark SQL和新的Hive on Spark(HIVE-7292),在介紹這兩個項目之前,我們首先關注下被終止的項目Shark。
About Shark
Shark發布于3年前,那個時候,Hive可以說是SQL on Hadoop的唯一選擇,負責將SQL編譯成可擴展的MapReduce作業。鑒于Hive的性能以及與Spark的兼容,Shark項目由此而生。
Shark即Hive on Spark,本質上是通過Hive的HQL解析,把HQL翻譯成Spark上的RDD操作,然后通過Hive的metadata獲取數據庫里的表信息,實際HDFS上的數據和文件,會由Shark獲取并放到Spark上運算。
Shark的最大特性就是快和與Hive的完全兼容,且可以在shell模式下使用rdd2sql()這樣的API,把HQL得到的結果集,繼續在scala環境下運算,支持自己編寫簡單的機器學習或簡單分析處理函數,對HQL結果進一步分析計算。
除去Spark本身的迭代計算,Shark速度快的原因還在于其本身的改造,比如:
終止Shark的原因
在會議上,Databricks表示,Shark更多是對Hive的改造,替換了Hive的物理執行引擎,因此會有一個很快的速度。然而,不容忽視的是,Shark繼承了大量的Hive代碼,因此給優化和維護帶來了大量的麻煩。隨著性能優化和先進分析整合的進一步加深,基于MapReduce設計的部分無疑成為了整個項目的瓶頸。
因此,為了更好的發展,給用戶提供一個更好的體驗,Databricks宣布終止Shark項目,從而將更多的精力放到Spark SQL上。
About Spark SQL
既然不是基于Hive,Spark SQL究竟有什么樣的改變,這里我們不妨看向 張包峰的博客。Spark新發布的Spark SQL組件讓Spark對SQL有了別樣于Shark基于Hive的支持。參考官方手冊,具體分三部分:
第一點對SQL的支持主要依賴了Catalyst這個新的查詢優化框架(下面會給出一些Catalyst的簡介),在把SQL解析成邏輯執行計劃之后,利用Catalyst包里的一些類和接口,執行了一些簡單的執行計劃優化,最后變成RDD的計算。雖然目前的SQL解析器比較簡單,執行計劃的優化比較通配,還有些參考價值,所以看了下這塊代碼。目前這個PR在昨天已經merge進了主干,可以在SQL模塊里看到這部分實現,還有catalyst模塊看到Catalyst的代碼。下面會具體介紹Spark SQL模塊的實現。
第二點對Parquet的支持不關注,因為我們的應用場景里不會使用Parquet這樣的列存儲,適用場景不一樣。
第三點對Hive的這種結合方式,沒有什么核心的進展。與Shark相比,Shark依賴Hive的Metastore,解析器等能把hql執行變成Spark上的計算,而Hive的現在這種結合方式與代碼里引入Hive包執行hql沒什么本質區別,只是把hive hql的數據與RDD的打通這種交互做得更友好了。
About HIVE-7292
HIVE-7292更像是Spark SQL成為標準SQL on Spark項目的補充,首先它是一個Hive on Spark Project,旨在服務已有Hive投入的機構,這個項目將Spark作為一個替代執行引擎提供給Hive,從而為這些機構提供一個遷往Spark的途徑,提供一個更流暢的Hive體驗。(文/仲浩 審校/魏偉)
免費訂閱“CSDN云計算”微信公眾號,實時掌握第一手云中消息!
CSDN作為國內最專業的云計算服務平臺,提供云計算、大數據、虛擬化、數據中心、OpenStack、CloudStack、Hadoop、Spark、機器學習、智能算法等相關云計算觀點,云計算技術,云計算平臺,云計算實踐,云計算產業資訊等服務。