2015-07-21 147 views
4

我插入記錄使用左加入Hive.When我設置限制1查詢工作,但所有記錄查詢卡住99%減少工作。蜂巢查詢卡在99%

下面的查詢工作

Insert overwrite table tablename select a.id , b.name from a left join b on a.id = b.id limit 1; 

但這減速器的數量不

Insert overwrite table tablename select table1.id , table2.name from table1 left join table2 on table1.id = table2.id; 

我有所增加,但它仍然無法正常工作。

+0

轉到hadoop jobtracker web-dashboard並查找失敗的mapreduce作業。這可能會給你更多的細節.. – sras

+0

數據的大小是多少?檢查rsourcemanager/jobtracker UI並檢查作業詳情。看看這項工作產生了多少任務,有多少成功,有多少失敗,失敗的原因等。 –

回答

0

如果查詢得到停留在99%的退房下列選項 -

  • 數據偏度,如果你已經扭曲的數據它可能可能1減速器正在做所有的工作
  • 重複雙方的鍵 - 如果你有許多重複的連接鍵在你的輸出可能爆炸和查詢可能會卡住
  • 您的表格之一是小圖嘗試使用地圖連接或者如果可能的話SMB連接這是一個巨大的性能增益減少邊加入
  • 轉到資源管理器日誌並查看數據量作業正在訪問和寫入。
2

如果它符合要求,Hive會自動進行一些優化,以便將連接的一側連接到內存。然而,在某些情況下,這些工作陷入了99%,從未真正完成。

我已經多次遇到這種情況,並且我通過明確指定某些設置配置單元來避免這種情況。嘗試下面的設置,看看它是否適合你。

  1. hive.auto.convert.join =假
  2. mapred.compress.map.output =真
  3. hive.exec.parallel =真
+0

Amar我試過所有的設置,但仍然查詢被卡住了99%。 – user2895589

+0

你能分享你在這兩個表中有多少數據? – Amar

+0

table1有36.4 MB和table2有204 MB.I嘗試查詢限制1000,它的工作。但沒有限制,它只是卡住了。 – user2895589

3

這裏是一些Hive優化,可能有助於查詢優化器並減少通過線路發送的數據開銷。

set hive.exec.parallel=true; 
set mapred.compress.map.output=true; 
set mapred.output.compress=true; 
set hive.exec.compress.output=true; 
set hive.exec.parallel=true; 
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; 

但是,我認爲潛在問題在聯結中有更大的可能性。有關歪斜和可能的解決方法的完整說明,請參閱https://cwiki.apache.org/confluence/display/Hive/Skewed+Join+Optimization

您還提到過table1比table2小得多。您可能會嘗試使用地圖邊連接,具體取決於您的硬件限制。 (https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Joins

0

使用這些配置,並嘗試 hive> set mapreduce.map.memory.mb=9000; hive> set mapreduce.map.java.opts=-Xmx7200m; hive> set mapreduce.reduce.memory.mb=9000; hive> set mapreduce.reduce.java.opts=-Xmx7200m