Hadoop框架之 企業優化

2021-10-09 00:12:50 字數 4381 閱讀 5573

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...