2017-03-16 93 views
1

我在Hive表中有120百萬條記錄。在執行select語句時,某些where條件或執行任何avg,max(mathematical operation)查詢執行時間爲2到3小時。我是否缺少Hive中的某些配置?因爲它看起來非常不尋常,因此需要花費這麼多時間。我在Microsoft Azure服務上使用Hortonworks 2.5 Sandbox。在Hive中查詢性能問題

請給任何解決方案。謝謝。

回答

5

有許多方法可以優化查詢,但這可能對您有所幫助,因爲您的數據集記錄。按我的理解和實踐我在這裏強調幾點:

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語句的方式不止一種。儘管每個語句的功能都是相同的,但它可能具有明顯不同的性能特徵。

+0

感謝您的回覆。我已經完成了所有這些東西,但沒有得到解決方案。多節點環境是否是強制性的?目前我有單節點,可以嗎? – Ishvari

+0

爲了解概念 - 單節點設置很好。但要查看關於性能的區分輸出,我建議具有良好配置的多節點設置。 –