Hadoop Yarn Container 资源分配

在Hadoop2.0中, YARN负责管理MapReduce中的资源(内存, CPU等)并且将其打包成Container. 这样可以精简MapReduce, 使之专注于其擅长的数据处理任务, 将无需考虑资源调度. YARN会管理集群中所有机器的可用计算资源. 基于这些资源YARN会调度应用(比如MapReduce)发来的资源请求, 然后YARN会通过分配Container来给每个应用提供处理能力, Container是YARN中处理能力的基本单元, 是对内存, CPU等的封装.




在Hadoop集群中,平衡内存(RAM)、处理器(CPU核心)和磁盘的使用是至关重要的,合理规划以免某一项引起瓶颈制约。一般的建议是,一块磁盘和一个CPU核心上配置两个Container会达到集群利用率的最佳平衡。


从可用的硬件资源角度看,要调整群集每个节点Yarn和MapReduce的内存配置到合适的数据,应注意以下几个重要的元素:
  • RAM (总内存大小)
  • CORES (CPU核心数)
  • DISKS (磁盘数)



Yarn和MapReduce的总的可用内存应考虑到保留的内存。保留的内存是由系统进程和其他Hadoop进程(如Hbase)所需要的内存。
保留内存=保留系统内存+保留HBase内存(如果HBase是在同一个节点)
使用下表确定每个节点的保留的内存:

建议保留的内存

每个节点的内存总量 建议保留系统内存 建议保留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

下面的计算是确定每个节点的Container允许的最大数量。
#Container数量=min (2*CORES, 1.8*DISKS, (可用内存)/最低Container的大小)
最低Container的大小 这个值是依赖于可用的RAM数量——在较小的存储节点,最小的Container的大小也应较小。下面的表列出了推荐值:

每个节点的总内存 建议的最低Container的大小
小于 4 GB 256 MB
4 GB 到 8 GB 512 MB
8 GB 到 24 GB 1024 MB
24 GB 以上 2048 MB

最后计算的每个Container的内存大小是:

每个Container的内存大小 = max(最小Container内存大小, (总可用内存) /Container数))

根据计算,YARN 和 MapReduce 配置如下:
配置文件 配置项 设置值
yarn-site.xml yarn.nodemanager.resource.memory-mb = Container数量 * 每个Container的内存大小
yarn-site.xml yarn.scheduler.minimum-allocation-mb = 每个Container的内存大小
yarn-site.xml yarn.scheduler.maximum-allocation-mb = Container数量 * 每个Container的内存大小
mapred-site.xml mapreduce.map.memory.mb = 每个Container的内存大小
mapred-site.xml mapreduce.reduce.memory.mb = 2 * 每个Container的内存大小
mapred-site.xml mapreduce.map.java.opts = 0.8 * 每个Container的内存大小
mapred-site.xml mapreduce.reduce.java.opts = 0.8 * 2 * 每个Container的内存大小
yarn-site.xml (check) yarn.app.mapreduce.am.resource.mb = 2 * 每个Container的内存大小
yarn-site.xml (check) yarn.app.mapreduce.am.command-opts = 0.8 * 2 * 每个Container的内存大小


提醒 : 安装完成后, yarn-site.xml 和 mapred-site.xml 的配置文件在安装目录的 /etc/hadoop/文件夹下.

例如:
集群的节点有 12 CPU cores, 48 GB RAM, and 12 磁盘.
预留内存= 6 GB 系统预留 + 8 GB HBase预留
最小Container内存大小 = 2 GB

如果不安装 HBase:
#Container数 = min (2*12, 1.8* 12, (48-6)/2) = min (24, 21.6, 21) = 21
每个Container的内存大小 = max (2, (48-6)/21) = max (2, 2) = 2

Configuration Value Calculation
yarn.nodemanager.resource.memory-mb = 21 * 2 = 42*1024 MB
yarn.scheduler.minimum-allocation-mb = 2*1024 MB
yarn.scheduler.maximum-allocation-mb = 21 * 2 = 42*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

如果安装 Hbase:
#Container数 = min (2*12, 1.8* 12, (48-6-8)/2) = min (24, 21.6, 17) = 17
每个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


你可能感兴趣的:(Hadoop)