2016-04-15 96 views
0

我有多個文件,通過單個文件使用蜂巢union all,現在union all查詢加入超過10個蜂巢表,並且非常緩慢。每個個人union all查詢也有一個或多個連接條件。還需要配置單元性能聯盟全部

我的預期最終結果以由主鍵進行分組,e.g:

table 1 

key1|val1|val2|.. 

table 2 

key1|val10|val11|.. 

insert overwrite <temptable> 
select key, output_string from 
(select key, concat (col1,col2,..) from table 1 where <join conditions> 
union all 
select key, concat(col10,col11,..) from table 2 where <join conditions> 
.. 
) 
cluster by key; 

union all將結合以上兩個表中,我使用簇通過鍵,以產生期望的結果。蜂巢的表現非常緩慢,其他的選擇是什麼?

+0

我看@ veeraB的答案,看起來很權威。我想問的第一個問題是每個單獨查詢需要多長時間 - 任何長時間運行的查詢都會影響整個「工會」鏈。接下來的問題是,Hive可以以這樣的方式解析查詢:並行運行每個查詢,這可以通過'EXPLAIN'或者只是在執行時觀察;如果不是,'hive.optimize.union.remove'設置可能是一個選項。 –

回答

0

注意此選項:

hive.optimize.union.remove 
Default Value: false 
Added In: Hive 0.10.0 with HIVE-3276 

是否刪除工會和工會推動和文件水槽上方工會之間的運營商。這可以避免通過聯合對輸出進行額外掃描。

這對於聯合查詢是獨立有用的,並且在hive.optimize.skewjoin.compiletime設置爲true時特別有用,因爲插入了一個額外聯合。

如果hive.merge.mapfileshive.merge.mapredfiles中的任何一個設置爲true,則會觸發合併。

如果用戶已設置hive.merge.mapfilestruehive.merge.mapredfilesfalse的想法是,減速器的數量少,所以文件的數量反正小。

但是,通過這種優化,我們可能會大幅增加文件數量。所以,我們積極合併。

+0

謝謝Tom和veeraB。 hive.optimize.skewjoin.compiletime應該可以做到。聯盟的所有查詢都在早期產生了100多個map-reduce作業,但是我做了一些更改以刪除一些不必要的連接,現在它已經減少到12個以上的作業。 – rupal