1. map數的計算公式為:
num_map_tasks=max[$,min($,$)]
mapred.min.spilt.size指的是資料的最小分割單元大小(預設為1b)
mapred.max.split.size指的是資料的最大分割單元大小(預設為256mb)
dfs.block.size指的是hdfs設定的資料塊大小(這個值是在配置檔案中定好的,而且hive是獲取不到的)
所以map的數量是由mapred.min.spilt.size、mapred.max.split.size這兩個引數的最大值決定的。如果不做修改的話乙個map task處理256mb的資料,增大mapred.max.split.size的值可以減少map的數量,減少mapred.max.split.size的值可以增大map的數量。但是直接修改mapred.map.tasks是沒有效果的。如果執行速度較慢,可以考慮增加map的數量,增加並行度,如果執行速度較快,增加map數量不太可能加快速度,反而有可能因為初始化map使速度變慢,此時可以考慮減少map,這樣可以節省更多資源給其他job
1. reduce數的計算公式為:
num_reduce_tasks=min[$,($/ $)]
hive.exec.reducers.bytes.per.reducer(預設值為1g)
所以reduce的數量是由輸入的資料量大小決定的,但是reduce的數量不能超過999,可以通過設定hive.exec.reducers.bytes.per.reducer來設定reduce的個數,也可以通過設定mapred.reduce.tasks來設定reduce的數量。
1. 在spill階段,由於記憶體不夠,資料需要溢寫到磁碟再排序,然後對所有的檔案進行merge。可以通過設定io.sort.mb來增大環形緩衝區的大小,避免spill
2. 在copy階段是把檔案從map端copy到reduce端。預設情況下是5%的map完成時reduce就開始啟動copy,這個時候是很浪費資源的,因為reduce一旦啟動就被占用,直到所有的map完成,reduce才可以進行接下來的動作。這個比例可以通過mapred.reduce.slowstart.completed.maps這個引數來設定。如果覺得這麼做會導致reduce端copy的速度減慢,可以通過tasktracker.http.threads決定作為server端的map用於提供資料傳輸服務的執行緒數量。mapred.reduce.parallel.copies可以決定作為client端的reduce同時從map端拉取資料的並行度(一次同時從多少個map中拉取資料),注意引數協調一致。
Hive之企業級引數優化
3.使用vectorization vectorized查詢執行會提高操作效能,例如scans aggregations filters和joins,通過一次執行1024行提高效能。該屬性在hive 0.13版本引入,該屬性能夠提高查詢執行的時間。通過設定以下兩個引數 code language s...
Hive學習筆記 Hive 引數
第一部分 hive 引數 hive.exec.max.created.files 說明 所有hive執行的map與reduce任務可以產生的檔案的和 預設值 100000 hive.exec.dynamic.partition 說明 是否為自動分割槽 預設值 false hive.mapred.re...
hive 幾種hive優化方法
1.通過explain或者explain extended來檢視執行計畫。explain select from u3 執行結果 stage dependencies stage 0 is a root stage stage plans stage stage 0 fetch operator l...