2017-05-30 67 views
0

我需要加入4代表和在每個連接條件列是不同蜂房 - 4表連接

數據大小

Table emp - 8T 
Table stu - 10GB 
Table college - 800 MB 
Table address - 2 TB 

查詢 -

select a.*,b.*,c.*,d.* from emp a 
Left outer join stu b(a.id=b.id) 
left outer join college c(a.trans_id=c.trans_id and a.emp_id=c.emp_id) 
left outer join address d(a.seq_no=d.seq_no and a.emp_id=d.emp_id) 

執行的上述時間查詢太高,因爲使用沉重的數據集。

有什麼辦法來提高性能

回答

0

蜂房的性能可提高使用Tez作爲執行引擎。

根據您是否使用預先安裝的Hive平臺或安裝了vanilla安裝程序,您可能已經或可能不會有Tez。

如果沒有,TEZ安裝說明可以在這裏找到:Install/Deploy Instructions for Tez

爲了使用TEZ你需要前面加上您的查詢: set hive.execution.engine=tez;

在我的測試(3節點羣集)我經歷平均25%的性能提升。

+0

我們沒有使用tez,也沒有計劃,有沒有其他方法,我嘗試了蜂巢的幾個屬性,但沒有任何工作適合我。 – Amit

0

有多種方式來調整你的查詢:

  1. 使用TEZ引擎。
  2. 每個表格都有更好的文件格式,尤其是較大的文件格式。
  3. 添加CBO,矢量化屬性
  4. 映射器,縮減器,每個映射任務的體積,減少任務,映射輸出壓縮屬性的數量。
  5. 您還可以修改您的查詢,使您的最大表格是您的連接查詢中的第二個表格.i.e select a.* from tabA a join tabB b on a.id=b.id。這裏TabB應該大於tabA。

您可以參考this文檔獲取有關優化的更多詳細信息。

0
  1. 使用TEZ。 Tez執行速度比MR快。

set hive.execution.engine=tez;

  • 嘗試減小每減速器字節。降低這個參數將增加parallelizm(減速機的數量)
  • hive.exec.reducers.bytes.per.reducer=67108864;

  • 使用矢量
  • set hive.vectorized.execution.enabled = true; set hive.vectorized.execution.reduce.enabled = true; 4.你的表是非常大的。如果可能的話減少數據量。例如只加入新的/最近更新的記錄。