问题描述
节点扩容后重启HA模式的EMR集群发现HDFS启动失败。
问题排查
1.查看集群的状态发现yarn、zookeeper异常,打印如下:
yarn worker1 :No space left on device: '/usr/local/ecm-agent/log/tasks/29061358
zookeeper worker1 : No space left on device: '/usr/local/ecm-agent/log/tasks/29061567/'
此时需要登录到worker1节点,执行 df -h 检查下磁盘的使用情况。
从其他worker节点连接worker-1节点无法连接,一直在报 No space left on device。说明worker-1节点的空间确实不足。此时建议优先节点磁盘扩容。
待节点扩容后,此时worker-1节点可以正常,但是发现yarn、zookeeper组件还是异常。这是因为依赖的HDFS服务组件异常。
2.针对HDFS服务异常发现是主NN实例启动失败导致的,看NameNode的out日志打印如下:
Invalid maximum heap size: -XmxHADOOP_NAMENODE_HEAPSIZEm Error: Could not create the Java Virtual Machine.
此时可以初步确认造成HDFS异常的原因就是主NameNode实例的hadoop环境变量被修改过导致的。
1)检查了异常header节点和正常header节点的java版本是一致的;
2)对比了正常节点和异常节点 /etc/ecm/hadoop-conf/hadoop-env 文件,发现配置参数是一致的
3)此时在header-2节点上执行 su -l hdfs -c "HADOOP_HEAPSIZE=HADOOP_NAMENODE_HEAPSIZE /usr/lib/hadoop-current/sbin/hadoop-daemon.sh start namenode" 操作发现报错还是Invalid maximum heap size: -XmxHADOOP_NAMENODE_HEAPSIZEm Error: Could not create the Java Virtual Machine.
此时就可以说明造成HDFS异常的原因就是主NameNode实例的hadoop环境变量有被人为修改过导致的。
4)在异常header-2节点上执行echo $HADOOP_NAMENODE_HEAPSIZE 发现环境变量为空,而正常场景下应该是有值的。
5)此时建议在header-2节点上执行 export HADOOP_NAMENODE_HEAPSIZE=8192 操作手动将值配置上,重新运行su -l hdfs -c操作发现还是一样的异常报错。
6)针对配置的环境变量执行env | grep HADOOP_CONF 操作,发现header-2节点上HADOOP_CONF_DIR配置的路径与正常header-1节点不一致,是一个自定义路径。
此时手动修改异常节点的HADOOP_CONF_DIR配置为 /etc/ecm/hadoop-conf后,重启主NameNode实例成功,HDFS服务恢复正常,且依赖的yarn、zookeeper服务也恢复正常。
解决方案
环境变量配置被认为修改,手动修改HADOOP_CONF_DIR=/etc/ecm/hadoop-conf 后问题解决。
适用于
E-MapReduce