[Hive]從一個經典案例看優化mapred.map.tasks的重要性
我所在公司所使用的生產Hive環境的幾個引數配置如下:
dfs.block.size=268435456
hive.merge.mapredfiles=true
hive.merge.mapfiles=true
hive.merge.size.per.task=256000000
mapred.map.tasks=2
因為合併小檔案預設為true,而dfs.block.size與hive.merge.size.per.task的搭配使得合併後的絕大部分檔案都在300MB左右。
CASE 1:
現在我們假設有3個300MB大小的檔案,那麼goalsize
= min(900MB/2,256MB) = 256MB
所以整個JOB會有6個map,其中3個map分別處理256MB的資料,還有3個map分別處理44MB的資料。
這時候木桶效應就來了,整個JOB的map階段的執行時間不是看最短的1個map的執行時間,而是看最長的1個map的執行時間。所以,雖然有3個map分別只處理44MB的資料,可以很快跑完,但它們還是要等待另外3個處理256MB的map。顯然,處理256MB的3個map拖了整個JOB的後腿。
CASE 2:
如果我們把mapred.map.tasks設定成6,再來看一下有什麼變化:
goalsize = min(900MB/6,256MB) = 150MB
整個JOB同樣會分配6個map來處理,每個map處理150MB的資料,非常均勻,誰都不會拖後腿,最合理地分配了資源,執行時間大約為CASE
1的59%(150/256)
案例分析:
雖然mapred.map.tasks從2調整到了6,但是CASE
2並沒有比CASE 1多用map資源,同樣都是使用6個map。而CASE
2的執行時間約為CASE 1執行時間的59%。
從這個案例可以看出,對mapred.map.tasks進行自動化的優化設定其實是可以很明顯地提高作業執行效率的。
相關文章
- 一個效能優化的案例優化
- Oracle 優化經典Oracle優化
- Hive --------- hive 的優化Hive優化
- 【MySQL】NOT EXISTS優化的一個案例MySql優化
- 畫江湖之SQL優化 -10大經典案例場景SQL優化
- 記一個SQL優化案例SQL優化
- 一個複合索引的優化案例索引優化
- 一個MySQL優化案例的初步思路MySql優化
- hive的優化Hive優化
- 從工作中的一個問題看演算法的重要性演算法
- 從一個流量被競品掠奪的ASA案例,看品牌詞投放和後設資料的重要性
- [Hive]Hive排序優化Hive排序優化
- Python入門經典案例一Python
- 從一次效能優化看https的效能優化HTTP
- Hive優化Hive優化
- oracle優化常用經典參考Oracle優化
- Hive篇---Hive使用優化Hive優化
- JavaScript經典案例(二)JavaScript
- MySQL經典案例分析MySql
- 從一條問題SQL優化看SQL TransformationSQL優化ORM
- 30個關於Shell指令碼的經典案例(中)指令碼
- 30個關於Shell指令碼的經典案例(下)指令碼
- 30個關於Shell指令碼的經典案例(上)指令碼
- hive、spark優化HiveSpark優化
- Hive效能優化Hive優化
- 一個bug造就的經典遊戲....遊戲
- Oracle效能優化-SQL優化(案例一)Oracle優化SQL
- Java基礎經典案例Java
- 從案例分析如何優化前端效能優化前端
- 從效能角度看 react 元件拆分的重要性React元件
- 經典氣泡排序的分析、優化及測試排序優化
- 從一個案例看PL/SQL程式碼片的編譯與執行SQL編譯
- 一次成功的優化案例優化
- MySQL SQL優化案例(一)MySql優化
- IO優化案例一則優化
- Hive高階優化Hive優化
- hive優化-資料傾斜優化Hive優化
- 開發者以經典案例談7個典型的BOSS戰役形式