1、发现问题
现象:重启hadoop集群,namenode报错无法启动。
报错:
2、分析问题
一看报错有“OutOfMemoryError:Java heap space”字眼,应该是JVM相关参数的问题,于时就去看hadoop-env.sh配置文件。配置文件设置如下:
export HADOOP_NAMENODE_OPTS="-Dhadoop.security.logger=${HADOOP_SECURITY_LOGGER:-INFO,RFAS} -Dhdfs.audit.logger=${HDFS_AUDIT_LOGGER:-INFO,NullAppender} $HADOOP_NAMENODE_OPTS"
export HADOOP_DATANODE_OPTS="-Dhadoop.security.logger=ERROR,RFAS $HADOOP_DATANODE_OPTS"
从上可以看出参数中并没有设置堆内存的大小。
HDFS集群中的角色(NameNode、SecondaryNameNode、DataNode)的默认的堆内存大小都是1000M
3、解决问题
将参数改成如下,再次启动集群,启动成功。
export HADOOP_NAMENODE_OPTS="-Xms4096m -Xmx4096m -Dhadoop.security.logger=${HADOOP_SECURITY_LOGGER:-INFO,RFAS} -Dhdfs.audit.logger=${HDFS_AUDIT_LOGGER:-INFO,NullAppender} $HADOOP_NAMENODE_OPTS"
export HADOOP_SECONDARYNAMENODE_OPTS="-Xms4096m -Xmx4096m -Dhadoop.security.logger=${HADOOP_SECURITY_LOGGER:-INFO,RFAS} -Dhdfs.audit.logger=${HDFS_AUDIT_LOGGER:-INFO,NullAppender} $HADOOP_NAMENODE_OPTS"
export HADOOP_DATANODE_OPTS="-Xms2048M -Xmx2048M -Dhadoop.security.logger=ERROR,RFAS -Xmx4096m $HADOOP_DATANODE_OPTS"
参数说明:
-Xmx4096m 可使用最大堆内存
-Xms4096m 初始堆内存
参考:HDFS内存配置 - 花未全开*月未圆 - 博客园



