1. 程式人生 > >yarn記憶體引數

yarn記憶體引數

參考自: 

1)http://blog.chinaunix.net/uid-28311809-id-4383551.html
2)https://support.pivotal.io/hc/en-us/articles/201462036-Mapreduce-YARN-Memory-Parameters 

1、yarn-site.xml 設定

1.1 RM設定

RM的記憶體資源配置,主要是通過下面的兩個引數進行的(這兩個值是Yarn平臺特性,應在yarn-sit.xml中配置好): 
yarn.scheduler.minimum-allocation-mb 
yarn.scheduler.maximum-allocation-mb
說明:單個容器可申請的最小與最大記憶體,應用在執行申請記憶體時不能超過最大值,小於最小值則分配最小值,從這個角度看,最小值有點想作業系統中的頁。最小值還有另外一種用途,計算一個節點的最大container數目注:這兩個值一經設定不能動態改變(此處所說的動態改變是指應用執行時)。

1.2 NM設定

NM的記憶體資源配置,主要是通過下面兩個引數進行的(這兩個值是Yarn平臺特性,應在yarn-sit.xml中配置) :
yarn.nodemanager.resource.memory-mb
yarn.nodemanager.vmem-pmem-ratio
說明:每個節點可用的最大記憶體,RM中的兩個值不應該超過此值。此數值可以用於計算container最大數目,即:用此值除以RM中的最小容器記憶體。虛擬記憶體率,是佔task所用記憶體的百分比,預設值為2.1倍;注意:第一個引數是不可修改的,一旦設定,整個執行過程中不可動態修改,且該值的預設大小是8G,即使計算機記憶體不足8G也會按著8G記憶體來使用。

2、map-site.xml 設定

2.1 AM設定

AM記憶體配置相關引數,此處以MapReduce為例進行說明(這兩個值是AM特性,應在mapred-site.xml中配置),如下:
mapreduce.map.memory.mb
mapreduce.reduce.memory.mb
說明:這兩個引數指定用於MapReduce的兩個任務(Map and Reduce task)的記憶體大小,其值應該在RM中的最大最小container之間。如果沒有配置則通過如下簡單公式獲得:
max(MIN_CONTAINER_SIZE, (Total Available RAM) / containers))
一般的reduce應該是map的2倍。注:這兩個值可以在應用啟動時通過引數改變;

2.2 AM JVM設定

AM中其它與記憶體相關的引數,還有JVM相關的引數,這些引數可以通過,如下選項配置:
mapreduce.map.java.opts
mapreduce.reduce.java.opts
說明:這兩個參主要是為需要執行JVM程式(java、scala等)準備的,通過這兩個設定可以向JVM中傳遞引數的,與記憶體有關的是,-Xmx,-Xms等選項。此數值大小,應該在AM中的map.mb和reduce.mb之間。

3、所有引數

YARN相關:
yarn.scheduler.minimum-allocation-mb
yarn.scheduler.maximum-allocation-mb
yarn.nodemanager.vmem-pmem-ratio
yarn.nodemanager.resource.memory.mb
Map相關引數
mapreduce.map.java.opts
mapreduce.map.memory.mb
Reduce相關引數
mapreduce.reduce.java.opts
mapreduce.reduce.memory.mb注意:
在hadoop2及以上版本中,map和reduce task 是執行在container中的。mapreduce.{map|reduce}.memory.mb被yarn用來設定container的記憶體大小。如果container的記憶體超限,會被yarn殺死。在container中,為了執行map和reduce task,yarn會在contaner中啟動一個jvm來執行task任務。mapreduce.{map|reduce}.java.opts用來設定container啟動的jvm引數,通過設定Xmx來設定map 或者reduce task的最大堆記憶體。理論上,{map|reduce}.java.opts設定的最大堆記憶體要比{map|reduce}.memory.mb小。例如:
hadoop jar <jarName> -Dmapreduce.reduce.memory.mb=4096 -Dmapreduce.map.java.opts=-Xmx3276

4、舉例說明

如下圖:
預設情況下,yarn.nodemanager.vmem-pmem-ratio被設定為2.1,這意味著,每個map或者task任務只能使用2.1倍("mapreduce.reduce.memory.mb") or ("mapreduce.map.memory.mb") 大小的虛擬記憶體,否則,會被nm殺掉。
例如下面的的報錯資訊:
Current usage: 2.1gb of 2.0gb physical memory used; 1.6gb of 3.15gb virtual memory used. Killing container.

map container的記憶體("mapreduce.map.memory.mb")被設定為1536mb 。am為其申請了2048m的記憶體,因為am的最小分配(yarn.scheduler.minimum-allocation-mb)是1024.如果map task對記憶體超過了2048m,nm會kill掉該task。reduce類似。When a mapreduce job completes you will see several counters dumped at the end of the job.The three

memory counters below show how much physical memory was allocated vs virtual memory.