1.1.HDP YARN MapReduce参数调优建议
转自:https://blog.csdn.net/mnasd/article/details/81202908
1.1.1.RM的内存资源配置,配置的是资源调度相关
RM1:yarn.scheduler.minimum-allocation-mb 分配给AM单个容器可申请的最小内存(默认是1G)
RM2:yarn.scheduler.maximum-allocation-mb 分配给AM单个容器可申请的最大内存(默认是yarn.nodemanager.resource.memory-mb的值)
注:
最小值可以计算一个节点最大Container数量(可以适当调大一些,比如2GB)
一旦设置,不可动态改变
1.1.2.NM的内存资源配置,配置的是硬件资源相关
NM1:yarn.nodemanager.resource.memory-mb 节点最大可用内存
NM2:yarn.nodemanager.vmem-pmem-ratio 虚拟内存率,默认2.1 (可以是5,有些场景下如果内存不足,会导致任务跑失败)
注:
RM1、RM2的值均不能大于NM1的值
NM1可以计算节点最大最大Container数量,max(Container)=NM1/RM2
一旦设置,不可动态改变
1.1.3.AM内存配置相关参数,配置的是任务相关
AM1:mapreduce.map.memory.mb 分配给map Container的内存大小
AM2:mapreduce.reduce.memory.mb 分配给reduce Container的内存大小
l 这两个值应该在RM1和RM2这两个值之间
l AM2的值最好为AM1的两倍
l 这两个值可以在启动时改变
AM3:mapreduce.map.java.opts 运行map任务的jvm参数,如-Xmx,-Xms等选项
AM4:mapreduce.reduce.java.opts 运行reduce任务的jvm参数,如-Xmx,-Xms等选项。
注:
1、这两个值应该在AM1和AM2之间。
1.1.4.手动计算YARN和MapReduce内存配置
下面参考:https://docs.cloudera.com/HDPDocuments/HDP2/HDP-2.1.1/bk_installing_manually_book/content/rpm-chap1-11.html
HDP实用程序脚本是计算HDP内存配置设置的推荐方法,但也提供了手工计算YARN和MapReduce内存配置设置的信息,以供参考。
1.1.4.1.使用HDP实用程序脚本计算内存配置设置
这个章节介绍如何通过hdp-configuration-utils.py的Python脚本来计算YARN、MapReduce、Hive和Tez的内存。这些内存分配设置基于特定硬件。hdp-configuration-utils.py在HDP的套件文件(http://docs.hortonworks.com/HDPDocuments/HDP2/HDP-2.1.1/bk_installing_manually_book/content/rpm-chap1-9.html)中。
1.1.4.1.1.下载套件文件
我们提供了一系列的套件文件,包括script文件(scripts.zip)和配置文件(configuration_files.zip),可以通过以下方式下载此文件:
wget http://public-repo-1.hortonworks.com/HDP/tools/2.1.1.0/hdp_manual_install_rpm_helper_files-2.1.1.385.tar.gz
Hortonworks强烈建议您编辑和获取包含在伴生文件中的文件。
或者,您还可以将内容复制到~/.bash_profile中,以在您的环境中设置这些环境变量。
下面提供了创建Hadoop目录的示例脚本文件的快照。这个示例脚本文件将源文件包含在伴生文件中。
#!/bin/bash
./users.sh
./directories.sh
echo "Create datanode local dir"
mkdir -p $DFS_DATA_DIR;
chown -R $HDFS_USER:$HADOOP_GROUP $DFS_DATA_DIR;
chmod -R 750 $DFS_DATA_DIR;
echo "Create yarn local dir"
mkdir -p $YARN_LOCAL_DIR;
chown -R $YARN_USER:$HADOOP_GROUP $YARN_LOCAL_DIR;
chmod -R 755 $YARN_LOCAL_DIR;
echo "Create yarn local log dir"
mkdir -p $YARN_LOCAL_LOG_DIR;
chown -R $YARN_USER:$HADOOP_GROUP $YARN_LOCAL_LOG_DIR;
chmod -R 755 $YARN_LOCAL_LOG_DIR;
1.1.4.1.2.运行这个脚本
要运行hdp-configuration-util .py脚本,在包含脚本的文件夹中执行以下命令:
python hdp-configuration-utils.py <options>
有以下可选项:
可选项 | 描述 |
---|---|
-c CORES | 在每个节点上的cpu核数 |
-m MEMORY | 每个节点的内存数量 |
-d DISKS | 每个节点中磁盘数量 |
-k HBASE | 如果HBASE安装了为True,反之为False |
你可以使用-h或–help选项查看帮助和使用方法。
例如:
[root@hadoop5 hdp_manual_install_rpm_helper_files-2.1.1.385]# pwd
/root/hdp_manual_install_rpm_helper_files-2.1.1.385
[root@hadoop5 hdp_manual_install_rpm_helper_files-2.1.1.385]# ls
configuration_files HDP-CHANGES.txt readme.txt scripts
[root@hadoop5 hdp_manual_install_rpm_helper_files-2.1.1.385]# cd configuration_files/
[root@hadoop5 configuration_files]# ls
core_hadoop ganglia hbase hive nagios oozie pig sqoop tez webhcat zookeeper
[root@hadoop5 configuration_files]# cd ../scripts/
[root@hadoop5 scripts]# ls
directories.sh hdp-configuration-utils.py usersAndGroups.sh yarn-utils.py
[root@hadoop5 scripts]# python hdp-configuration-utils.py -c 16 -m 64 -d 4 -k True
Using cores=16 memory=64GB disks=4 hbase=True
Profile: cores=16 memory=49152MB reserved=16GB usableMem=48GB disks=4
Num Container=8
Container Ram=6144MB
Used Ram=48GB
Unused Ram=16GB
yarn.scheduler.minimum-allocation-mb=6144
yarn.scheduler.maximum-allocation-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-opts=-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
[root@hadoop5 scripts]#
1.1.4.1.3.手工计算YARN和MapReduce内存配置设置
YARN会考虑集群中每台机器上的所有可用计算资源。基于可用资源,基于可用的资源,YARN协商来自集群中运行的应用程序(如MapReduce)的资源请求,通过分配容器的方式YARN提供提供处理能力。容器是YARN处理能力的基本单元,是资源元素(内存和CPU等)的包装单元。
在集群中,平衡内存、处理(CPU核数)和磁盘的使用至关重要,以便处理不受任何集群资源的限制。作为一般建议,允许每个磁盘两个容器,每个核提供了集群利用率的最佳平衡。在为集群节点确定适当的YARN和MapReduce内存配置时,从可用的硬件资源开始。特别的,注意每个节点的下面的值:
RAM(内存大小)
CORES(CPU核数)
DISKS(硬盘数量)
YARN和MapReduce的总可用RAM应考虑预留内存。保留内存是系统进程和其他Hadoop进程(如HBase)所需的RAM。
Reserved Memory = Reserved for stack memory + Reserved for HBase Memory (If HBase is on the same node)
推荐的的保留内存:
每个node节点的总内存 | 推荐保留给系统的内存 | 推荐保留给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 |
接下来计算每个节点允许的最大的容器数量。下面的公式可以被使用:
of containers = min (2*CORES, 1.8*DISKS, (Total available RAM) / MIN_CONTAINER_SIZE)
其中MIN_CONTAINER_SIZE是最小的容器大小(RAM中),这个值取决于可用RAM的数量—在内存小的节点中,container的最小尺寸也应该更小。下表列出了推荐值。
每个节点总RAM数量 | 推荐的最小的container大小 |
---|---|
小于4GB | 256 MB |
4GB 和 8GB之间 | 512 MB |
8GB和24GB之间 | 1024 MB |
大于24GB | 2048 MB |
最后的计算是确定每个容器的RAM数量:
RAM-per-container = max(MIN_CONTAINER_SIZE, (Total Available RAM) / containers))
用这些计算,YARN和MapReduce等参数的配置可以设置成如下:
配置文件 | 属性 | 值 |
---|---|---|
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 (mapreduce中的参数配置) | yarn.app.mapreduce.am.resource.mb | = 2 * RAM-per-container |
yarn-site.xml (check) | yarn.app.mapreduce.am.command-opts |