怎样确定Yarn中容器Container,Mapreduce相关參数的内存设置,对于初始集群,由于不知道集群的类型(如cpu密集、内存密集)我们须要依据经验提供给我们一个參考配置值,来作为基础的配置。
完毕这一任务有两种方式,确定YARN和MapReduce的内存设置,我们能够使用HDP工具脚本进行内存配置设定
执行hdp-configuration-utils.py 这个Python脚本(下载地址:hdp-configuration-utils)来计算YARN、MapReduce须要的内存,执行下面命令
python hdp-configuration-utils.py options |
当中可选项例如以下:
选项 | 描写叙述 |
-c CORES | 每一个客户机的核数目 |
-m MEMORY | 每一个客户机拥有的内存总数 |
-d DISK | 每一个客户机拥有的磁盘数目 |
-k HBASE | 假设Hbase安装了为”True”,否则为”False” |
注:须要python26的执行环境
我们能够使用-h或-help来显示描写叙述选项的帮助信息。
样例
执行下面的命令
python hdp-configuration-utils.py -c 16 -m 64 -d 4 -k True |
结果例如以下:
手动计算YARN和MapReduce内存配置设置接下来我们将描写叙述怎样基于特定的硬件,手工的设置YARN和MapReduce内存。
YARN能够考虑集群中全部节点的可用的计算机资源。
基于可用的资源,YARN会沟通协调应用程序(如:mapReduce)须要的资源。YARN会为每一个应用提供对应的容器Container。容器Container是YARN的基本处理单元,是内存和CPU资源的一种封装。
在Hadoop集群中。平衡内存RAM、处理器cpu和磁盘的使用是很重要的。作为一般的推荐,为每一个磁盘和每一个核分配两个容器,为集群的利用率提供了最好的平衡。
当为一个集群决定合适的YARN和MapReduce内存设置时,从可用的硬件资源開始。注意每一个节点的下面值:
RAM(内存的数量) CORES(CPU的核数) DISKS(磁盘的数目) |
整个针对YARN和MapReduce可用的RAM数,应该考虑预留的内存。
预留的内存主要用于系统进程占用和其他Hadoop进程(如Hbase)。
预留的内存=保留栈内存+Hbase预留内存(假设Hbase是部署在同一台机器上) |
我们一般会使用下表来决定预留内存的大小
每一个节点的总内存 | 推荐系统保留的内存 | 推荐为hbase保留的内存 |
4GB | 1GB | 1GB |
8GB | 2GB | 1GB |
16GB | 2GB | 2GB |
24GB | 4GB | 4GB |
48GB | 6GB | 8GB |
64GB | 8GB | 8GB |
72GB | 8GB | 8GB |
96GB | 12GB | 16GB |
128GB | 24GB | 24GB |
256GB | 32GB | 32GB |
512GB | 64GB | 64GB |
接下来我们计算决定每一个节点同意的最大容器的数目。我们能够使用下列公式:
containers = min (2*CORES, 1.8*DISKS, (Total available RAM) /MIN_CONTAINER_SIZE) |
当中DISKS是參数每台机器中dfs.data.dirs參数的数目值。MIN_CONTAINER_SIZE是最小的容器大小(RAM)。这个值是依赖于RAM的可用数目——小的内存节点,最小的容器大小应该更小。
容器推荐值
每一个节点的总内存 | 推荐的最小容器大小 |
小于4GB | 256MB |
在4GB和8GB之间 | 512MB |
在8GB和24GB | 1024MB |
大于24GB | 20148MB |
终于的计算结果决定了每一个容器的RAM的数目。
RAM-per-container = max(MIN_CONTAINER_SIZE, (Total Available RAM) / containers)) |
由于这些计算,YARN和MapReduce设置例如以下
配置文件 | 配置设定 | 计算值 |
Yarn-site.xml | yarn.nodemanager.resource.memorymb | =containers*RAM-per-container |
Yarn-site.xml | yarn.scheduler.minimum-allocationmb | = RAM-per-container |
yarn-site.xml | yarn.scheduler.maximum-allocationmb | =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 |
mapred-site.xml | yarn.app.mapreduce.am.resource.mb | = 2 * RAM-per-container |
mapred-site.xml | yarn.app.mapreduce.am.commandopts | = 0.8 * 2 * RAM-per-container |
注:在安装好后,yarn-site.xml and mapred-site.xml位于文件夹/etc/Hadoop/conf文件夹
举例说明:
集群节点拥有12个CPU核,48GB内存和12块磁盘
保留内存(Reserved Memory)=6GB系统预留内存+(假设有Hbase)8GB的Hbase内存
最小的容器大小(Min container size)=2GB
含有的容器数(containers)=min(2*12,1.8*12,(48-6)/2)=min(24,21.6,21)=21
每一个容器的RAM(RAM-per-container)=max(2,(48-6)/21)=max(2,2)=2
依据上述样例计算出来的值
配置 | 计算值 |
yarn.nodemanager.resource.memory-mb | = 21 * 2 = 42*1024 MB |
yarn.scheduler.minimum-allocation-mb | = 2*1024 MB |