hive實現設定reduce個數的方法

2021-09-24 07:25:07 字數 1521 閱讀 7112

1.    hive自己如何確定reduce數: reduce個數的設定極大影響任務執行效率,不指定reduce個數的情況下,hive會猜測確定乙個reduce個數,基於以下兩個設定:hive.exec.reducers.bytes.per.reducer(每個reduce任務處理的資料量,預設為1000^3=1g) hive.exec.reducers.max(每個任務最大的reduce數,預設為999)計算reducer數的公式很簡單n=min(引數2,總輸入資料量/引數1)即,如果reduce的輸入(map的輸出)總大小不超過1g,那麼只會有乙個reduce任務;如:select pt,count(1) from popt_tbaccountcopy_mes where pt = '2012-07-04' group by pt;             /group/p_sdo_data/p_sdo_data_etl/pt/popt_tbaccountcopy_mes/pt=2012-07-04 總大小為9g多,因此這句有10個reduce

2.    調整reduce個數方法一: 調整hive.exec.reducers.bytes.per.reducer引數的值;set hive.exec.reducers.bytes.per.reducer=500000000; (500m)select pt,count(1) from popt_tbaccountcopy_mes where pt = '2012-07-04' group by pt; 這次有20個reduce

3.    調整reduce個數方法二; set mapred.reduce.tasks = 15;select pt,count(1) from popt_tbaccountcopy_mes where pt = '2012-07-04' group by pt;這次有15個reduce

4.    reduce個數並不是越多越好; 同map一樣,啟動和初始化reduce也會消耗時間和資源;另外,有多少個reduce,就會有多少個輸出檔案,如果生成了很多個小檔案,那麼如果這些小檔案作為下乙個任務的輸入,則也會出現小檔案過多的問題;

5.    什麼情況下只有乙個reduce; 很多時候你會發現任務中不管資料量多大,不管你有沒有設定調整reduce個數的引數,任務中一直都只有乙個reduce任務;其實只有乙個reduce任務的情況,除了資料量小於hive.exec.reducers.bytes.per.reducer引數值的情況外,還有以下原因:a)    沒有group by的彙總,比如把select pt,count(1) from popt_tbaccountcopy_mes where pt = '2012-07-04' group by pt; 寫成 select count(1) from popt_tbaccountcopy_mes where pt = '2012-07-04';這點非常常見,希望大家盡量改寫。b)    用了order byc)    有笛卡爾積通常這些情況下,除了找辦法來變通和避免,我暫時沒有什麼好的辦法,因為這些操作都是全域性的,所以hadoop不得不用乙個reduce去完成;同樣的,在設定reduce個數的時候也需要考慮這兩個原則:使大資料量利用合適的reduce數;使單個reduce任務處理合適的資料量;

hive調優,reduce的設定

原因 因為reduce過大會生成好多小檔案,如果這些小檔案作為下乙個job的輸入,則就應該考慮小檔案的合併問題 reduce的數目過少,執行耗時,可能造成資料傾斜的可能性 效能的差的高度原因 引數的調優1 hive.exec.reducers.bytes.per.reducer 1000000000...

Hive 設定map 和 reduce 的個數

一 控制hive任務中的map數 1.通常情況下,作業會通過input的目錄產生乙個或者多個map任務。主要的決定因素有 input的檔案總個數,input的檔案大小,集群設定的檔案塊大小 目前為128m,可在hive中通過set dfs.block.size 命令檢視到,該引數不能自定義修改 2....

Hive 設定map 和 reduce 的個數

一 控制hive任務中的map數 1.通常情況下,作業會通過input的目錄產生乙個或者多個map任務。主要的決定因素有 input的檔案總個數,input的檔案大小,集群設定的檔案塊大小 目前為128m,可在hive中通過set dfs.block.size 命令檢視到,該引數不能自定義修改 2....