2016-03-08 70 views
2

我是Spark.I新手,使用HiveContext發現我們可以連接到hive並運行HiveQL s。我運行它,它的工作。spark的HiveContext如何在內部工作?

我的疑問是Spark是否做它通過spark jobs。那就是,它僅使用HiveContext從HDFS

或者

它在內部調用蜂巢執行查詢訪問相應的蜂巢表文件?

回答

7

不,Spark不會調用配置單元來執行查詢。 Spark僅從配置單元中讀取元數據並在Spark引擎中執行查詢。 Spark擁有自己的SQL執行引擎,其中包含催化劑,鎢等組件以優化查詢並提供更快的結果。它使用Spark的配置單元和執行引擎的元數據來運行查詢。

Hive的最大優點之一是它是Metastore。它作爲hadoop eco系統中許多組件的單一元存儲。

回答您的問題,當您使用HiveContext時,它將訪問Metastore數據庫和您的所有Hive元數據,這些數據可以清楚地說明您擁有什麼類型的數據,數據,序列化和反序列化,壓縮編解碼器,列,數據類型以及字面上關於表和數據的每一個細節。這足以讓spark瞭解數據。總體而言,Spark只需要Metastore提供底層數據的完整詳細信息,一旦它具有元數據,它就會執行您在執行引擎上請求的查詢。 Hive比Spark更慢,因爲它使用MapReduce。所以,回到蜂巢並要求在蜂巢中運行是沒有意義的。

讓我知道它是否回答你的問題。

+0

你能爲此添加一些文檔參考嗎?謝謝 – Jorge

+0

謝謝你的回答!我還提到了對於小型表的SQL查詢在HiveContext中的工作時間比在Tez上直接在Hive上執行時間要快。在完全看到源代碼或文檔的鏈接時,它清楚地表明HiveContext使用Spark引擎而不是在Hive中執行查詢。 – metamaker