yarn記憶體引數
阿新 • • 發佈:2019-01-05
參考自:
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
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.