您好,登錄后才能下訂單哦!
這篇文章主要介紹了hive如何優化,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
Hive謂詞下推(Predicate pushdown)
參數打開設置:hive.optimize.ppd=true
實現:在不影響結果的情況下,盡量將過濾條件提前執行。謂詞下推后,過濾條件在map端執行,減少了map端的輸出,降低了數據在集群上傳輸的量,節約了集群的資源,也提升了任務的性能。
開啟Map端聚合功能
參數打開設置:hive.map.aggr=true
實現:在map中會做部分聚集操作,能夠使map傳送給reduce的數據量大大減少,從而在一定程度上減輕group by帶來的數據傾斜。
小文件合并
參數設置:
set hive.merge.mapfiles = true ##在 map only 的任務結束時合并小文件
set hive.merge.mapredfiles = false ## true 時在 MapReduce 的任務結束時合并小文件
set hive.merge.size.per.task =256*1000*1000 ##合并文件的大小
set mapred.max.split.size=256000000; ##每個 Map 最大分割大小
set mapred.min.split.size.per.node=1; ##一個節點上 split 的最少值
sethive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat; ##執行 Map 前進行小文件合并
實現:文件數目過多,會給HDFS帶來壓力,并且會影響處理效率,可以通過合并Map和Reduce的結果文件來消除這樣的影響。
解決group by造成的數據傾斜
參數設置:hive.groupby.skewindata=true
實現:當選項設定為 true,生成的查詢計劃會有兩個 MR Job。第一個 MR Job 中,Map 的輸出結果集合會隨機分布到Reduce 中,每個 Reduce 做部分聚合操作,并輸出結果,這樣處理的結果是相同的 Group By Key有可能被分發到不同的 Reduce 中,從而達到負載均衡的目的;第二個 MR Job 再根據預處理的數據結果按照 Group ByKey 分布到 Reduce 中(這個過程可以保證相同的 Group By Key 被分布到同一個 Reduce中),最后完成最終的聚合操作。
當hive.groupby.skewindata=true時,hive不支持多列上的去重操作,并報錯:
Error in semanticanalysis: DISTINCT on different columns notsupported with skew in data.
并行執行
參數設置:
set hive.exec.parallel=true,可以開啟并發執行。
set hive.exec.parallel.thread.number=16; //同一個sql允許最大并行度,默認為8。
實現:Hive會將一個查詢轉化為一個或多個階段,包括:MapReduce階段、抽樣階段、合并階段、limit階段等。默認情況下,一次只執行一個階段。不過,如果某些階段不是互相依賴,是可以并行執行的。
限制笛卡爾積查詢
兩張表join時必須有on語句
參數設置:set hive.mapred.mode=strict
實現:即使數據量不大的情況下,笛卡爾積造成的數據壓力也是很可觀的,盡量在參數階段進行限制,防止誤操作。
SQL層面優化
對于復雜的邏輯加工,有以下幾個原則:
1、數據量大的表應盡早進行數據篩選并可插入到一張臨時表,比如按日期篩選或者地區等,再與其他表進行邏輯關聯,可大大減少數據處理時間,這是最簡單也是最有效的辦法;
2、多個結果集union all的時候,可以使用逐個insertinto到結果表的方式,可提高數據處理速度;
3、join操作左表盡可能放置小表,MR的處理邏輯將小表緩存內存里,然后再去掃描大表,此時效率高;
4、hive雖然已經支持in/exists語法,少量查詢也是可以用的,但是更推薦用left semi join形式改寫一下,可以在數據量大的時候對比下兩種寫法效率;
5、還有一些基礎的原則啰嗦下:sort by代替order by;group by代替distinct;多表join盡量key相同;空值在join中可能會造成數據傾斜,如果空值部分數據對結果集無影響,提前篩掉;等等~
實際生產中一定要結合業務和公司數據特點,某些優化也不是萬能藥膏,多些實踐對比總會發現更多優化空間。
感謝你能夠認真閱讀完這篇文章,希望小編分享的“hive如何優化”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。