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...