mapreduce優化方法
mapreduce程式效率的瓶頸在於兩點:
cpu、記憶體、磁碟健康、網路
(1)資料傾斜
(2) map和reduce數設定不合理
(3) map執行時間太長,導致reduce等 待過久(4)小檔案過多
(5)大量的不可分塊的超大檔案
(6) spil)次數過多
(7) merge次數過多等。
mapreduce優化方法主要從六個方面考慮:資料輸入、map階段、reduce階段、io傳輸、資料傾斜問題和常用的調優引數
(1)合併小檔案:在執行mr任務前將小檔案進行合併,大量的小檔案會產性大量的map任務,增大map任務裝載次數,而任務的裝載比較耗時,從而導致mr執行較慢。
(2)採用combine textinputformat來作為輸入,解決輸入端大量小檔案場景
(1) 減少溢寫(spil) 次數:通過調整io sort.mb及sort.spill.percent引數值,增大觸發pil的記憶體上限,減少spill次數,從而減少磁碟io。
(2)減少合併(merge) 次數:通過調整io.sort.factor引數, 增大merge的檔案數目,減少merge的次數,從而縮短mr處理時間。
(3)在map之後,不影響業務邏輯前提下,先進行conbine處理,減少i/o。
(1)合理設定map和reduce數:兩個都不能設定:太少,也不能設定太多。太少,會導致task等待,延長處理時間;太多,會導致map、reduce任務間競爭資源,造成處理超時等錯誤。
(2)設定map、reduce共存: 調整slowstart. conpletedmaps引數,使miap執行到一定程度後,redue也開始執行,減少reduce的等待時間。
(3)規避使用reduce:因為reduce在用於連線資料集的時候將會產生大量的網路消耗。
(4)合理設定reduce端的buffer:預設情況下,資料達到一乙個閾值的時候,bufer中的資料就會寫入磁碟,然後reduce 會從磁碟中獲得所有的資料。也就是說,buffer和reduce是沒有直接關聯的,中間多次寫磁碟~> >讀磁碟的過程,既然有這個弊端,那麼就可以通過引數來配置,使得buffer中的一 部分資料可以直接輸送到reduce,從而減少i0開銷: mapreduce reduce input .buffer.percent,預設為0.0。 當值大於0的時候,會保留指定比例的記憶體讀buffer中的資料直接拿給reduce使用。這樣一來,設定buffer需要記憶體,讀取資料需要記憶體,reduce計算也要記憶體,所以要根據作業的運**況進行調整。
張棟 2020/8/9 23:59:57
1.資料傾斜現象
資料頻率傾斜某一 個區域的資料量 要遠遠大於其他區域。資料大小傾斜部分記錄的大小 \遠遠大於平均值。
2.減少資料傾斜的方法
方法1:抽樣和範圍分割槽
可以通過對原始資料進行抽樣得到的結果集來預設分割槽邊界值。
方法2:自定義分割槽
基於輸出鍵的背景知識進行自定義分割槽。例如,如果map輸出鍵的單詞**於一本書。且其中某幾個專業詞彙較多。那麼就可以自定義分割槽將這這些專業詞彙傳送給固定的一部分reduce例項。而將其他的都傳送給剩餘的reduce例項。
方法3: conbine
使用combine可以大量地減小資料傾斜。在可能的情兄下,combine的目 的就是
聚合並精簡資料。
方法4:採用map join,盡量避免reduce join。
1.資源相關引數
(1)以下引數是在使用者自己的mr應用程式中配置就可以生效(mapred-default.xml)
配置引數
引數說明
mapreduce.map.memory.mb
乙個maptask可使用的資源上限(單位:mb),預設為1024。如果maptask實際使用的資源量超過該值,則會被強制殺死。
mapreduce.reduce.memory.mb
乙個reducetask可使用的資源上限(單位:mb),預設為1024。如果reducetask實際使用的資源量超過該值,則會被強制殺死。
mapreduce.map.cpu.vcores
每個maptask可使用的最多cpu core數目,預設值: 1
mapreduce.reduce.cpu.vcores
每個reducetask可使用的最多cpu core數目,預設值: 1
mapreduce.reduce.shuffle.parallelcopies
每個reduce去map中取資料的並行數。預設值是5
mapreduce.reduce.shuffle.merge.percent
buffer中的資料達到多少比例開始寫入磁碟。預設值0.66
mapreduce.reduce.shuffle.input.buffer.percent
buffer大小佔reduce可用記憶體的比例。預設值0.7
mapreduce.reduce.input.buffer.percent
指定多少比例的記憶體用來存放buffer中的資料,預設值是0.0
(2)應該在yarn啟動之前就配置在伺服器的配置檔案中才能生效(yarn-default.xml)
配置引數
引數說明
yarn.scheduler.minimum-allocation-mb
給應用程式container分配的最小記憶體,預設值:1024
yarn.scheduler.maximum-allocation-mb
給應用程式container分配的最大記憶體,預設值:8192
yarn.scheduler.minimum-allocation-vcores
每個container申請的最小cpu核數,預設值:1
yarn.scheduler.maximum-allocation-vcores
每個container申請的最大cpu核數,預設值:32
yarn.nodemanager.resource.memory-mb
給containers分配的最大物理記憶體,預設值:8192
(3)shuffle效能優化的關鍵引數,應在yarn啟動之前就配置好(mapred-default.xml)
配置引數
引數說明
mapreduce.task.io.sort.mb
shuffle的環形緩衝區大小,預設100m
mapreduce.map.sort.spill.percent
環形緩衝區溢位的閾值,預設80%
2.容錯相關引數(mapreduce效能優化)
配置引數
引數說明
mapreduce.map.maxattempts
每個map task最大重試次數,一旦重試引數超過該值,則認為map task執行失敗,預設值:4。
mapreduce.reduce.maxattempts
每個reduce task最大重試次數,一旦重試引數超過該值,則認為map task執行失敗,預設值:4
mapreduce.task.timeout
hdfs上每個檔案都要在namenode上建立乙個索引,這個索引的大小約為150byte,這樣當小檔案比較多的時候,就會產生很多的索引檔案,一方面會大量占用namenode的記憶體空間,另一方面就是索引檔案過大使得索引速度變慢。
小檔案的優化無非以下幾種方式:
(1)在資料採集的時候,就將小檔案或小批資料合成大檔案再上傳hdfs。
(2)在業務處理之前,在hdfs上使用mapreduce程式對小檔案進行合併。
(3)在mapreduce處理時,可採用combinetextinputformat提高效率。
1. hadoop archive
是乙個高效地將小檔案放入hdfs塊中的檔案存檔工具,它能夠將多個小檔案打包成乙個har檔案, 這樣就減少了namenode的記憶體使用。
2. sequence file
sequence file 由一系列的二 進製key/value組成,如果key為檔名, value為檔案內容,則可以將大批小檔案合併成-乙個大檔案。
3. combinefilelnputformat
combinefileinputformat是一種新的inputformat, 用於將多個檔案合併成乙個單獨的split,另外,它會考慮資料的儲存位置。
4.開啟jvm重用
對於大量小檔案job,可以開啟jvm重用會減少45%執行時間。
jvm重用原理:乙個map執行在乙個jvm上, 開啟重用的話,該map在jvm上執行完畢後,jvm繼續執行其他map。
具體設定: mapreduce job jvm mumtasks值在10-20之間。
Hadoop 企業優化
mapreduce優化方法主要從六個方面考慮 資料輸入 map階段 reduce階段 io傳輸 資料傾斜問題和常用的調優引數。2.6.1 資源相關引數 以下引數是在使用者自己的mr應用程式中配置就可以生效 mapred default.xml 配置引數 引數說明 mapreduce.map.memo...
Hadoop 六 Hadoop企業優化
mapreduce 程式效率的瓶頸在於兩點 cpu 記憶體 磁碟健康 網路 1 資料傾斜 2 map和reduce數設定不合理 3 map執行時間太長,導致reduce等待過久 4 小檔案過多 5 大量的不可分塊的超大檔案 6 spill次數過多 7 merge次數過多等。mapreduce優化方法...
hadoop的企業優化
前言 mapreduce程式的效率的瓶頸在於兩點 計算機效能 cpu 記憶體 磁碟健康 網路 i o操作 資料傾斜 map和reduce數量設定不合理 map的執行時間太長,導致reduc的等待過久 小檔案過多 大量的補課分塊的超大檔案 spill 溢寫 次數過多 merge 合併 次數過多 map...