内存资源规划与配置
- 内存资源规划
1
2
3
4
5
6
7
8
9
10
11
12
13
14
1548G物理内存
- linux系统本身需要占用的内存+空留:20%-25% 9.6G
- 剩余:80% 38.4G
生产情况,NN和RM是部署在一台机器上的,一般分配8个G的内存,看情况适当调大
- NN:8G
- RM:8G
生产情况,DN和NM也是部署在一台机器上的
数据本地化:减少网络IO
- DN:4G
- NM:4G
剩余资源内存=30.4G,运行container容器(每一个container容器都是一个单独的进程)
hdfs:NN和DN进程配置
1
2
3
4
5
6
7hadoop-env.sh(参数需要自己添加)
# NN内存
HADOOP_NAMENODE_OPTS=-Xmx1000m(默认)
HADOOP_NAMENODE_OPTS=-Xmx8192m(建议8G)
# DN内存
HADOOP_DATANODE_OPTS=-Xmx1000m(默认)
HADOOP_DATANODE_OPTS=-Xmx4096m(建议4G)yarn:RM和NM进程配置
1
2
3
4
5
6
7
8默认1000M
yarn-env.sh
# RM内存
export YARN_RESOURCEMANAGER_HEAPSIZE=1000(默认)
export YARN_RESOURCEMANAGER_HEAPSIZE=8192(建议8G)
# NM内存
export YARN_NODEMANAGER_HEAPSIZE=1000(默认)
export YARN_NODEMANAGER_HEAPSIZE=4096(建议4G)container容器进程配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16yarn-site.xml
# container总内存
yarn.nodemanager.resource.memory-mb -1(默认8G)
yarn.nodemanager.resource.memory-mb 30*1024(总内存-【系统+空留内存】-【NN内存】-【NM内存】)
# 单个container最小内存
yarn.scheduler.minimum-allocation-mb 1024(默认)
yarn.scheduler.minimum-allocation-mb 2048(建议2G)
# 单个container最大内存
yarn.scheduler.maximum-allocation-mb 8192 (默认8G)
yarn.scheduler.maximum-allocation-mb 8192 (建议和yarn.nodemanager.resource.memory-mb配置成一样的大小)
如果单个container任务需要到9G的内存,但是我们最大内存仅配置了8G,那么将会抛出InvalidResourceRequestException错误
yarn.scheduler.maximum-allocation-mb的配置同时也需要参考生产的任务,如果没有特别大的任务,可以适量减少,这里配置和yarn.nodemanager.resource.memory-mb一样大小不是固定调优手段
适当减少的时候需要注意,一定要yarn.nodemanager.resource.memory-mb/yarn.scheduler.maximum-allocation-mb是一个整数,否则会有剩余内存空出container OOM是否主动kill配置
1
2
3
4
5
6
7- 保持默认,不要动这三个参数
# 物理内存不足时是否主动kill掉contailer进程
yarn.nodemanager.pmem-check-enabled true
# 虚拟内存不足时是否主动kill掉contailer进程
yarn.nodemanager.vmem-check-enabled true
# 允许使用的物理内存和虚拟内存比率
yarn.nodemanager.vmem-pmem-ratio 2.1
CPU资源规划与配置
1 | # 物理core和vcore的比率 |
总结
1 | yarn的在调优时候要综合考虑CPU和内存的分配,尽量保证不要空出多余的资源 |