HDP3.1 中 YRAN 和 MR2 的內存大小配置的計算方式

    Container 是 YARN 中基本的處理單元,它是對內存、CPU等計算的封裝。總的來講,每一個core每塊硬盤 分配2個 container,能得到較好的集羣利用率。java

  1. 肯定可用內存大小。node

  對於每臺主機來講,YARN 和 MapReduce 能用內存大小是除去預留給系統的內存(若是還有 HBase,還要相應留內存給它)後的大小,即:app

YARN 可用內存(RAM for YARN) = 總內存(Total RAM) - 系統預留(Reserved for System) - HBase預留(Reserved for HBase)

如下是預留內存大小的推薦表spa

每臺 Node 的總內存 給系統預留的內存 給 HBase 預留的內存
4 GB 1 GB 1 GB
8 GB 2 GB 1 GB
16 GB 2 GB 2 GB
24 GB 4 GB 4 GB
48 GB 6 GB 8 GB
64 GB 8 GB 8 GB
72 GB 8 GB 8 GB
96 GB 12 GB 16 GB
128 GB 24 GB 24 GB
256 GB 32 GB 32 GB
512 GB 64 GB 64 GB

2. 計算每一個 Node 最大容許的 container 的數量code

最大container 數量 = min (2*CORES, 1.8*DISKS, (總的可用內存) / MIN_CONTAINER_SIZE)

上面 CORES 指的是核數,DISKS 是硬盤數, MIN_CONTAINER_SIZE 是 container 最小的內存大小。xml

MIN_CONTAINER_SIZE 推薦表:blog

每一個 Node 總內存 推薦的 Minimum Container Size
Less than 4 GB 256 MB
Between 4 GB and 8 GB 512 MB
Between 8 GB and 24 GB 1024 MB
Above 24 GB 2048 MB

3. 計算 RAM-per-Container內存

RAM-per-container = max(MIN_CONTAINER_SIZE, (總內存) / containers))it

 

經過上面計算獲得的值,能夠按下表進行配置io

配置文件 配置項 數值計算公式
yarn-site.xml yarn.nodemanager.resource.memory-mb = containers * RAM-per-container
yarn-site.xml yarn.scheduler.minimum-allocation-mb = RAM-per-container
yarn-site.xml yarn.scheduler.maximum-allocation-mb = containers * RAM-per-container
mapred-site.xml mapreduce.map.memory.mb = RAM-per-container
mapred-site.xml         mapreduce.reduce.memory.mb = 2 * RAM-per-container
mapred-site.xml mapreduce.map.java.opts = 0.8 * RAM-per-container
mapred-site.xml mapreduce.reduce.java.opts = 0.8 * 2 * RAM-per-container
yarn-site.xml (check) yarn.app.mapreduce.am.resource.mb = 2 * RAM-per-container
yarn-site.xml (check) yarn.app.mapreduce.am.command-opts = 0.8 * 2 * RAM-per-container

 

下面以單臺節點具備 12 core,48G內存, 12 塊硬盤 舉例

(1)預留內存(Reserved RAM) = 6G(系統) + 8G(HBase)

(2)MIN_CONTAINER_SIZE = 2G

(3)container_num = min (2*12, 1.8* 12, (48-6-8)/2) = min (24, 21.6, 17) = 17

(4)RAM-per-container = max (2, (48-6-8)/17) = max (2, 2) = 2

得出以下配置項的值

配置項 計算獲得的值
yarn.nodemanager.resource.memory-mb = 17 * 2 = 34*1024 MB
yarn.scheduler.minimum-allocation-mb = 2*1024 MB
yarn.scheduler.maximum-allocation-mb = 17 * 2 = 34*1024 MB
mapreduce.map.memory.mb = 2*1024 MB
mapreduce.reduce.memory.mb          = 2 * 2 = 4*1024 MB
mapreduce.map.java.opts = 0.8 * 2 = 1.6*1024 MB
mapreduce.reduce.java.opts = 0.8 * 2 * 2 = 3.2*1024 MB
yarn.app.mapreduce.am.resource.mb = 2 * 2 = 4*1024 MB
yarn.app.mapreduce.am.command-opts = 0.8 * 2 * 2 = 3.2*1024 MB

 

注意:

1. 改變 yarn.scheduler.minimum-allocation-mb 或 yarn.scheduler.minimum-allocation-mb,能夠改變單個 Node 中 container 的數量

2. 若是 Node 具備較高的 RAM,可是較少的 cores 或 disks,能夠減小  yarn.scheduler.minimum-allocation-mb 和 yarn.scheduler.minimum-allocation-mb 的值,以釋放更多的內存給其它應用。

相關文章
相關標籤/搜索