關於hive中的reduce個數的設置。


我們都知道在進行hive的查詢的時候,設置合理的reduce個數能夠使計算的速度加快。

具體的提高速度的方法有下面這些:

(1)     hive.exec.reducers.bytes.per.reducer(每個reduce任務處理的數據量,默認為1000^3=1G) 

       hive.exec.reducers.max(每個任務最大的reduce數,默認為999)

我們公司的集群當中的這兩個參數的設置如圖所示。

在數據進入到reduce中的時候,在map的輸入的時候總的數據量小於這個數的時候,會交給一個reduce去處理。

(2)set mapred.reduce.tasks = 15;

也可以通過設置reduce的個數進行reduce端的設置。截圖如下:

 

雖然設置了reduce的個數看起來好像執行速度變快了。但是實際並不是這樣的。

同map一樣,啟動和初始化reduce也會消耗時間和資源,

另外,有多少個reduce,就會有多少個輸出文件,如果生成了很多小文件,那這些小文件作為下一次任務的輸入,則也會出現小文件過多的問題。

 

 對於整個sql的優化可以從下面幾個步驟去優化:

(1)盡量盡早地過濾數據,減少每個階段的數據量,對於分區表要加分區,同時只選擇需要使用到的字段

(2)單個SQL所起的JOB個數盡量控制在5個以下

(3)慎重使用mapjoin,一般行數小於2000行,大小小於1M(擴容后可以適當放大)的表才能使用,小表要注意放在join的左邊。否則會引起磁盤和內存的大量消耗

(4)寫SQL要先了解數據本身的特點,如果有join ,group操作的話,要注意是否會有數據傾斜

    set hive.exec.reducers.max=200;

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

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

(5) 如果union all的部分個數大於2,或者每個union部分數據量大,應該拆成多個insert into 語句,這樣會提升執行的速度。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM