Hive查詢優化

2022-06-04 20:15:09 字數 1119 閱讀 8417

1.先過濾,再查詢,因為每次生成中間表都會儲存到linux磁碟上 , 記住 , 不是hdfs

2.注意資料傾斜 , 傾斜的原因是reduce端資料的大量富集, 可適度增加reduce , 會著開啟

reduce自己判斷 , 某一比較大 , 自己再分開點.也就是合理設定

reduce數量

hive.exec.reducers.bytes.per.reducer(每個reduce任務處理的資料量,預設為1000^3=1g)

hive.exec.reducers.max    每個人物最多reduce任務,預設999

3.小檔案優化

用於設定合併的引數有:

4.小檔案產生原因

1,動態分割槽插入過多資料,產生小檔案

2.資料來源自己本身包含很多小檔案

3.reduce數量越多 , 小檔案也越多.

小檔案太多會造成 map 多 ,耗記憶體

4.小檔案解決方案.

使用sequencefile作為表儲存格式,不要用textfile,在一定程度上可以減少小檔案;

1. join操作, 把小表放在左邊 , 否則會oom

2.要寫sql先了解資料本身的特點 , 否則如果有join , group會造成資料傾斜

set hive.exec.reducers.max=200;

set mapred.reduce.tasks= 200;---增大reduce個數

set hive.groupby.mapaggr.checkinterval=100000 ;--這個是group的鍵對應的記錄條數超過這個值則會進行分拆,值根據具體資料量設定

set hive.groupby.skewindata=true; --如果是group by過程出現傾斜 應該設定為true

set hive.skewjoin.key=100000; --這個是join的鍵對應的記錄條數超過這個值則會進行分拆,值根據具體資料量設定

set hive.optimize.skewjoin=true;--如果是join 過程出現傾斜 應該設定為true

5. hive 查詢的時候 , 其中 , group by , 結果中必須包含此欄位, 否則無法查詢,

但是比如age>20   其列可以 不在查詢中

6.

Hive查詢優化

害,最近組裡有個妹子不是很懂sql,一查就等好長時間,看的我十分揪心,算了,寫幾個常見的hive查詢優化叭。1.條目少的表或者子查詢放在join左邊,因為join左邊會讀入記憶體 select a.val b.val from a 條目少 join b on a.key b.key 2.join 操...

hive查詢優化總結

hive查詢優化總結 儲存,學習,分享 join查詢操作的基本原則 應該將條目少的表 子查詢放在 join 操作符的左邊。原因是在 join 操作的 reduce 階段,位於 join 操作符左邊的表的內容會被載入進記憶體,將條目少的表放在左邊,可以有效減少發生記憶體溢位錯誤的機率。join查詢操作...

hive查詢與優化

今早的過濾資料,盡可能的減少資料在每個階段的輸入和輸出,使用分割槽表時,要使用分割槽條件進行過濾 可以使用中間表來完成一些複雜的操作 join操作時,將小表放在join的左邊 union all的個數大於2,可以考慮使用inset into來優化 根據資料的本身特點,在使用join 和group b...