我在Hive表中有120百萬條記錄。在執行select
語句時,某些where
條件或執行任何avg
,max(mathematical operation)
查詢執行時間爲2到3小時。我是否缺少Hive中的某些配置?因爲它看起來非常不尋常,因此需要花費這麼多時間。我在Microsoft Azure服務上使用Hortonworks 2.5 Sandbox。在Hive中查詢性能問題
請給任何解決方案。謝謝。
我在Hive表中有120百萬條記錄。在執行select
語句時,某些where
條件或執行任何avg
,max(mathematical operation)
查詢執行時間爲2到3小時。我是否缺少Hive中的某些配置?因爲它看起來非常不尋常,因此需要花費這麼多時間。我在Microsoft Azure服務上使用Hortonworks 2.5 Sandbox。在Hive中查詢性能問題
請給任何解決方案。謝謝。
有許多方法可以優化查詢,但這可能對您有所幫助,因爲您的數據集記錄。按我的理解和實踐我在這裏強調幾點:
1:使用TEZ 蜂巢可以使用Apache TEZ執行引擎,而不是古老的地圖,減少發動機的。我想作一個簡單的建議:如果它不是在你的環境中默認打開的,使用TEZ設置爲「true」在蜂巢查詢開始執行以下操作:
set hive.execution.engine=tez;
通過以上的設置,每您執行的HIVE查詢將利用Tez。
2:使用ORCFile
蜂房支持ORCfile,支持通過像謂詞下推,壓縮和多個技術速度的提高的新表的存儲格式。
3:使用矢量
矢量化查詢執行提高像掃描,聚合,過濾器操作的性能和連接,通過一次,而不是單列每次在1024行批次執行它們。
在蜂巢0.13介紹,此功能顯著提高了查詢的執行時間,並且很容易用兩個參數設置中啓用:
set hive.vectorized.execution.enabled = true;
set hive.vectorized.execution.reduce.enabled = true;
4:基於成本的查詢優化
最近除了蜂巢基於成本的優化基於查詢成本執行進一步的優化,從而導致潛在的不同決策:如何排序連接,要執行的連接類型,並行度等。
要使用基於成本的優化(也稱爲CBO),設置以下參數在查詢的開頭:
set hive.cbo.enable=true;
set hive.compute.query.using.stats=true;
set hive.stats.fetch.column.stats=true;
set hive.stats.fetch.partition.stats=true;
5:編寫好的SQL
SQL是一個功能強大聲明性語言。像其他聲明性語言一樣,編寫SQL語句的方式不止一種。儘管每個語句的功能都是相同的,但它可能具有明顯不同的性能特徵。
感謝您的回覆。我已經完成了所有這些東西,但沒有得到解決方案。多節點環境是否是強制性的?目前我有單節點,可以嗎? – Ishvari
爲了解概念 - 單節點設置很好。但要查看關於性能的區分輸出,我建議具有良好配置的多節點設置。 –