9.确定HDP内存配置设置
可以使用两种方法来确定YARN和MapReduce内存配置设置:
- 使用HDP Utility脚本计算内存配置设置
- 手动计算YARN和MapReduce内存配置设置
HDP实用程序脚本是计算HDP内存配置设置的推荐方法,但也提供了有关手动计算YARN和MapReduce内存配置设置的信息以供参考。
9.1。使用HDP Utility脚本计算内存配置设置
本节介绍如何使用hdp-configuration-utils.py Python脚本根据节点硬件规范计算YARN,MapReduce,Hive和Tez内存分配设置。该 hdp-configuration-utils.py脚本包含在HDP 配套文件中。
运行脚本
要运行该hdp-configuration-utils.py脚本,请从包含该脚本的文件夹中执行以下命令:
<span style="color:#555555"><span style="color:#23302d">python hdp-configuration-utils.py <options></span></span>
使用以下选项:
选项 | 描述 |
-c CORES | 每台主机上的核心数。 |
-m MEMORY | 每个主机上的内存量,以GB为单位。 |
-d DISKS | 每台主机上的磁盘数。 |
-k HBASE | 如果安装了HBase,则为“True”,否则为“False”。 |
注意:您还可以使用-h或 --help选项显示描述选项的“帮助”消息。
例
运行以下命令:
<span style="color:#555555"><span style="color:#23302d">python hdp-configuration-utils.py -c 16 -m 64 -d 4 -k True</span></span>
会回来:
<span style="color:#555555"><span style="color:#23302d"> 使用cores = 16内存= 64GB磁盘= 4 hbase = True
配置文件:cores = 16内存= 49152MB保留= 16GB usefulMem = 48GB磁盘= 4
Num Container = 8
容器Ram = 6144MB
使用Ram = 48GB
未使用的Ram = 16GB
yarn.scheduler.minimum分配-MB = 6144
yarn.scheduler.maximum分配-MB = 49152
yarn.nodemanager.resource.memory-MB = 49152
mapreduce.map.memory.mb = 6144
mapreduce.map.java.opts = -Xmx4096m
mapreduce.reduce.memory.mb = 6144
mapreduce.reduce.java.opts = -Xmx4096m
yarn.app.mapreduce.am.resource.mb = 6144
yarn.app.mapreduce.am.command-选择采用= -Xmx4096m
mapreduce.task.io.sort.mb = 1792
tez.am.resource.memory.mb = 6144
tez.am.java.opts = -Xmx4096m
hive.tez.container.size = 6144
hive.tez.java.opts = -Xmx4096m
hive.auto.convert.join.noconditionaltask.size = 1342177000</span></span>
9.2。手动计算YARN和MapReduce内存配置设置
本节介绍如何根据节点硬件规范手动配置YARN和MapReduce内存分配设置。
YARN会考虑群集中每台计算机上的所有可用计算资源。根据可用资源,YARN协商来自群集中运行的应用程序(例如MapReduce)的资源请求。然后,YARN通过分配容器为每个应用程序提供处理能力。Container是YARN中处理能力的基本单位,是资源元素(内存,cpu等)的封装。
在Hadoop集群中,平衡内存(RAM),处理器(CPU内核)和磁盘的使用至关重要,这样处理不受这些集群资源中的任何一个的限制。作为一般建议,允许每个磁盘和每个核心使用两个Container,从而为群集利用率提供最佳平衡。
在为群集节点确定适当的YARN和MapReduce内存配置时,请从可用的硬件资源开始。具体来说,请注意每个节点上的以下值:
- RAM(内存量)
- CORES(CPU内核数)
- 磁盘(磁盘数)
YARN和MapReduce的总可用RAM应考虑保留内存。Reserved Memory是系统进程和其他Hadoop进程(例如HBase)所需的RAM。
保留内存=为堆栈内存保留+为HBase内存保留(如果HBase在同一节点上)
使用下表确定每个节点的预留内存。
保留的内存建议
每个节点的总内存 | 推荐的预留系统内存 | 推荐的预留HBase内存 |
4GB | 1 GB | 1 GB |
8 GB | 2 GB | 1 GB |
16 GB | 2 GB | 2 GB |
24 GB | 4GB | 4GB |
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 |
下一个计算是确定每个节点允许的最大容器数。可以使用以下公式:
容器数量= min(2 * CORES,1.8 * DISKS,(总可用RAM)/ MIN_CONTAINER_SIZE)
其中MIN_CONTAINER_SIZE是最小容器大小(在RAM中)。此值取决于可用的RAM量 - 在较小的内存节点中,最小容器大小也应该更小。下表概述了建议值:
每个节点的总RAM | 建议的最小容器尺寸 |
小于4 GB | 256 MB |
介于4 GB和8 GB之间 | 512 MB |
介于8 GB和24 GB之间 | 1024 MB |
超过24 GB | 2048 MB |
最终的计算是确定每个容器的RAM量:
RAM-per-container = max(MIN_CONTAINER_SIZE,(总可用RAM)/容器))
通过这些计算,可以设置YARN和MapReduce配置:
配置文件 | 配置设置 | 价值计算 |
纱的site.xml | yarn.nodemanager.resource.memory-MB | =容器* RAM-per-container |
纱的site.xml | yarn.scheduler.minimum分配-MB | =每个容器的RAM |
纱的site.xml | yarn.scheduler.maximum分配-MB | =容器* RAM-per-container |
mapred-site.xml中 | mapreduce.map.memory.mb | =每个容器的RAM |
mapred-site.xml中 | mapreduce.reduce.memory.mb | = 2 * RAM-per-container |
mapred-site.xml中 | mapreduce.map.java.opts | = 0.8 *每个容器的RAM |
mapred-site.xml中 | mapreduce.reduce.java.opts | = 0.8 * 2 *每个容器的RAM |
yarn-site.xml(检查) | yarn.app.mapreduce.am.resource.mb | = 2 * RAM-per-container |
yarn-site.xml(检查) | yarn.app.mapreduce.am.command-OPTS | = 0.8 * 2 *每个容器的RAM |
注意:安装后,既 yarn-site.xml和mapred-site.xml位于在/etc/hadoop/conf文件夹中。
例子
群集节点具有12个CPU核心,48 GB RAM和12个磁盘。
保留内存= 6 GB保留用于系统内存+(如果是HBase)8 GB用于HBase
最小容器大小= 2 GB
如果没有HBase:
容器数量= min(2 * 12,1.8 * 12,(48-6)/ 2)= min(24,21.6,21)= 21
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分配-MB | = 2 * 1024 MB |
yarn.scheduler.maximum分配-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:
容器数量= min(2 * 12,1.8 * 12,(48-6-8)/ 2)= min(24,21.6,17)= 17
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分配-MB | = 2 * 1024 MB |
yarn.scheduler.maximum分配-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 |
笔记:
- 在yarn.scheduler.minimum-allocation-mb不改变的情况下进行更改yarn.nodemanager.resource.memory-mb,或者在yarn.nodemanager.resource.memory-mb不改变的 情况下进行更改 yarn.scheduler.minimum-allocation-mb也会更改每个节
- 如果您的安装具有高RAM但没有多少磁盘/核心,则可以通过降低yarn.scheduler.minimum-allocation-mb和 来释放RAM以执行其他任务yarn.nodemanager.resource.memory-mb。
9.2.1。在YARN上配置MapReduce内存设置
MapReduce在YARN之上运行,并利用YARN Containers来安排和执行Map and Reduce任务。在YARN上配置MapReduce资源利用率时,需要考虑三个方面:
- 每个Map和Reduce任务的物理RAM限制。
- 每个任务的JVM堆大小限制。
- 每个任务将接收的虚拟内存量。
您可以为每个Map和Reduce任务定义最大内存量。由于每个Map和Reduce任务都将在一个单独的Container中运行,因此这些最大内存设置应等于或大于YARN最小Container分配。
对于上一节中使用的示例群集(48 GB RAM,12个磁盘和12个核心),Container的最小RAM(yarn.scheduler.minimum-allocation-mb)= 2 GB。因此,我们将为Map任务容器分配4 GB,为Reduce任务容器分配8 GB。
在 mapred-site.xml:
<span style="color:#555555"><span style="color:#23302d"><名称> mapreduce.map.memory.mb </名称>
<值> 4096 </值>
<名称> mapreduce.reduce.memory.mb </名称>
<值> 8192 </值></span></span>
每个Container都将运行JVM以执行Map和Reduce任务。JVM堆大小应设置为低于Map和Reduce Containers的值,以便它们在YARN分配的Container内存的范围内。
在 mapred-site.xml:
<span style="color:#555555"><span style="color:#23302d"><名称> mapreduce.map.java.opts </名称>
<值> -Xmx3072m </值>
<名称> mapreduce.reduce.java.opts </名称>
<值> -Xmx6144m </值></span></span>
上述设置配置Map和Reduce任务将使用的物理RAM的上限。每个Map和Reduce任务的虚拟内存(物理+分页内存)上限由允许每个YARN Container的虚拟内存比确定。此比率使用以下配置属性设置,默认值为2.1:
在 yarn-site.xml:
<span style="color:#555555"><span style="color:#23302d"><名称> yarn.nodemanager.vmem-PMEM比率</名称>
<值> 2.1 </值></span></span>
通过我们示例集群上的上述设置,每个Map任务将接收以下内存分配:
- 分配的物理RAM总量= 4 GB
- Map任务Container中的JVM堆空间上限= 3 GB
- 虚拟内存上限= 4 * 2.1 = 8.2 GB
使用YARN上的MapReduce,不再为Map和Reduce任务预先配置静态插槽。整个群集可用于根据每个作业的需要动态分配Map和Reduce任务。在我们的示例集群中,通过上述配置,YARN将能够在每个节点上分配多达10个Mappers(40/4)或5个Reducers(40/8)(或者每个节点上的Mapper和Reducers的一些其他组合)节点限制)。