一、背景
HDFS的角色
NameNode:只在Master节点中,负责文件,名称等元数据(属性信息)的存储
DataNode:只在Core节点中,负责文件数据的存储
二、内存配置
HADOOP-HDFS的内存配置
- 确认内存参数值
内存参数是一下文件中配置:
/etc/hadoop/conf/hadoop-env.sh
也可以直接使用一下指令查看,单位为mb,默认1000mb
cat /etc/hadoop/conf/hadoop-env.sh | grep -1n HADOOP_HEAPSIZE
这里的内存(HADOOP_HEAPSIZE)实际上统一分配了下面各个守护进程的内存
- NameNode
- SecondaryNameNode
- DataNode
- JobTracker
- TaskTracker
NameNode内存配置
- 在AWS中,内存配置是【HADOOP_NAMENODE_HEAPSIZE】,单位为mb
cat /etc/hadoop/conf/hadoop-env.sh | grep HADOOP_NAMENODE_HEAPSIZE
下面是EMR中各机型所默认配置的各种内存参数
【Hadoop 守护进程配置设置】
Hadoop 守护进程配置设置 - Amazon EMR
- 另一种配置方法
在其他文章中,看到的配置方式是【HADOOP_NAMENODE_OPTS】
HADOOP_NAMENODE_OPTS=-Xmx4g
这里配置的意思是在程序启动时的进程参数
除了内存还能配置其他启动参数,例如开启审计日志:
HADOOP_NAMENODE_OPTS="$HADOOP_NAMENODE_OPTS -Dhdfs.audit.logger=INFO,RFAAUDIT"
三、审计日志配置
配置文件路径
审计日志的开启与相关参数文件在以下路径
/etc/hadoop/conf/log4j.properties
相关参数
可以使用以下指令查看相关配置
cat /etc/hadoop/conf/log4j.properties | grep hdfs.audit
其中:
hdfs.audit.logger:记录日志的方式,默认NullAppender即不记录日志
hdfs.audit.log.maxfilesize:每个日志档最大大小,超过该大小后就滚动产生下一份日志
hdfs.audit.log.maxbackupindex:最大日志份数,日志数量超过该值从最老的日志档开始重写
日志路径为
/mnt/var/log/hadoop-hdfs/hdfs-audit.log
配置参数
要开启审计日志,需要将【hdfs.audit.logger】的参数改成下面这样
hdfs.audit.logger=INFO,RFAAUDIT
四、以Json格式修改参数
在EMR中,如果要 整个实例组保持一致的参数,最好的方法是配置json参数,让实例组重新配置每一个实例的参数
下面是官方给出的json格式参数
[
{
"classification": "hadoop-env",
"properties": {},
"configurations": [
{
"classification": "export",
"properties": {
"HADOOP_NAMENODE_OPTS": "\"$HADOOP_NAMENODE_OPTS -Dhdfs.audit.logger=INFO,RFAAUDIT\"",
"HADOOP_NAMENODE_HEAPSIZE": "xx"
},
"configurations": []
}
]
},
{
"classification": "hadoop-log4j",
"properties": {
"hdfs.audit.log.maxbackupindex": "xx",
"hdfs.audit.log.maxfilesize": "xxMB"
},
"configurations": []
}
]
其中
- "HADOOP_NAMENODE_OPTS": "\"$HADOOP_NAMENODE_OPTS -Dhdfs.audit.logger=INFO,RFAAUDIT\"" 这个参数将开启审计日志
- "HADOOP_NAMENODE_HEAPSIZE":"xx" xx 的部份输入您想配置的内存参数值。
- "hdfs.audit.log.maxbackupindex": "xx" xx 的部份输入您想配置的审计日志数目。
- "hdfs.audit.log.maxfilesize": "xxMB"xx 的部份输入您想配置的审计日志 rorate 大小
如果是通过该方法修改EMR集群配置,那么当配置完json后,EMR会自动重启整个实例组,从而会造成一段时间服务不可用
如果是这样,对业务的影响非常大,除非是刚创建集群的时候,否则不可以这样配置
五、重启服务
如果是手动配置的话,也需要手动重启服务,然后观察是否有生效
参考官方文档《如何在 Amazon EMR 中重启服务?》
重启 Amazon EMR 中的服务
根据不同的EMR集群版本使用不同的指令
systemctl stop hadoop-hdfs-namenode.service
systemctl start hadoop-hdfs-namenode.service
※注意!!!
如果是active的namenode,那么需要先切换主备
如果手动强制切换可能会导致脑裂状态(两台都成了active状态)
可以通过重启主节点上的zkfc服务来切换主备
systemctl restart hadoop-hdfs-zkfc.service