Tez 優化參數
- 2019 年 12 月 15 日
- 筆記
背景
tez是hive的常用引擎之一,本文介紹tez常用的調試參數。主要是記憶體,map/reduce數量方面的調試。
1.記憶體調試
tez.am.resource.memory.mb
默認值 |
參數說明 |
詳細解釋 |
---|---|---|
128 |
Application Master分配的container大小,單位為M |
|
tez.am.launch.cmd-opts
默認值 |
參數說明 |
詳細解釋 |
---|---|---|
-Dlog4j.configurationFile=tez-container-log4j2.properties -Dtez.container.log.level=INFO -Dtez.container.root.logger=CLA |
Tez AppMaster進程啟動期間提供的命令行選項。 不要在這些啟動選項中設置任何Xmx或Xms,以便Tez可以自動確定它們 |
不需要主動設置 |
hive.tez.container.size
默認值 |
參數說明 |
詳細解釋 |
---|---|---|
128 |
Tez AppMaster向RM申請的container大小,單位M |
不需要主動設置TEZ的AppMaster佔用的container大小由TEZ自動跳轉,但是向AM申請出來的container大小則需要本參數管理 |
hive.tez.java.opts
默認值 |
參數說明 |
詳細解釋 |
---|---|---|
-Dlog4j.configurationFile=tez-container-log4j2.properties -Dtez.container.log.level=INFO -Dtez.container.root.logger=CLA |
container進程啟動期間提供的命令行選項。可以在默認參數後續添加記憶體參數選項,比如:-Xmx7500m -Xms 7500m |
該參數大小一般為hive.tez.container.size的80%,不建議直接在該參數中直接添加Xmx/Xms,而是使用下面的參數調參opts大小 |
tez.container.max.java.heap.fraction
默認值 |
參數說明 |
詳細解釋 |
---|---|---|
0.8 |
如果hive.tez.java.ops參數中沒有設置Xmx/Xms指標的話,TEZ將選擇該參數來確定Xmx/Xms的值,值得大小為0.8*hive.tez.container.size |
建議使用該值來調整opts |
tez.runtime.io.sort.mb
默認值 |
參數說明 |
詳細解釋 |
---|---|---|
512 |
排序輸出時的排序緩衝區大小,單位M |
可以將tez.runtime.io.sort.mb設置為hive.tez.container.size的40%, 但該值不能超過2GB。 |
hive.auto.convert.join.noconditionaltask.size
默認值 |
參數說明 |
詳細解釋 |
---|---|---|
10000000 |
如果hive.auto.convert.join.noconditionaltask已關閉,則此參數不會生效。但是,如果它打開,並且n路連接的表/分區的n-1的大小總和小於此大小,連接直接轉換為mapjoin(沒有條件任務)。 默認值為10MB |
該值能將多個JOIN的表的n-1個表合成一個大表,然後將該錶轉為mapjoin|可以將該值設置為hive.tez.container.size的1/3。 |
2.map/reduce優化
2.1 map數量設置
tez.grouping.min-size tez.grouping.max-size
默認值 |
參數說明 |
詳細解釋 |
---|---|---|
50M,1G |
分組拆分大小的下限,默認值為 50 MB分組拆分大小的上限,默認值為 1 GB |
減小這兩個參數可以改善延遲,增大這兩個參數可以提高吞吐量。例如,若要為數據大小 128 MB設置四個映射器任務,可將每個任務的這兩個參數設置為 32 MB(33,554,432 位元組)。。 |
2.2 reduce數量設置
hive.tez.auto.reducer.parallelism
默認值 |
參數說明 |
詳細解釋 |
---|---|---|
false |
打開Tez的reducer parallelism特性。設置true後,tez會在運行時根據數據大小動態調整reduce數量 |
最好使用TEZ提供的動態調整reduce數量功能。不要使用mapred.reduce.tasks參數去直接決定reduce的個數。只有打開該參數才能使用下面的hive.tex.min.partition.factor ,hive.tez.max.partition.factor參數 |
hive.exec.reducers.max
默認值 |
參數說明 |
詳細解釋 |
---|---|---|
1009 |
任務中允許的最大reduce數量 |
只有不使用mapred.reduce.tasks參數,該參數才能生效。 |
hive.exec.reducers.bytes.per.reducer
默認值 |
參數說明 |
詳細解釋 |
---|---|---|
256000000 |
每個reduce處理的數據量,默認值是256M |
介紹該參數是為了說明下面的計算reduce個數的公式 |
hive.tex.min.partition.factor hive.tez.max.partition.factor
maxReduces = min(hive.exec.reducers.max [1099], max((ReducerStage estimate/hive.exec.reducers.bytes.per.reducer),1)*hive.tez.max.partition.factor)
minReduces = min(hive.exec.reducers.max [1099], max((ReducerStage estimate/hive.exec.reducers.bytes.per.reducer),1)*hive.tez.min.partition.factor)
默認值 |
參數說明 |
詳細解釋 |
---|---|---|
0.252 |
1.hive.tex.min.partition.factor默認值為0.252.hive.tez.max.partition.factor默認值為2這兩個值效果一致,增加該值就是增加reduce數量。減少該值則減少reduce數量 |
從公式中可以看出調整reduce數量由三個變數控制:hive.exec.reducers.bytes.per.reducer,hive.tex.min.partition.factor,hive.tex.max.partition.factor。假設reduce任務估算出的數據里為 190944 bytes,則maxReuces=min(1099, max(190944/256000000,1)*2)=2 |
tez.shuffle-vertex-manager.min-src-fraction tez.shuffle-vertex-manager.max-src-fraction
默認值 |
參數說明 |
詳細解釋 |
---|---|---|
0.250.75 |
1.tez.shuffle-vertex-manager.min-src-fraction默認值為0.252.tez.shuffle-vertex-manager.max-src-fraction默認值為2這兩個值效果一致,增加該值則reduce stage啟動晚一些。減少該值則reduce stage啟動早一些 |
舉例:想讓所有map都執行完才開始執行reduce,可以將這兩個值都設置為1 |