Debian 11主节点Hadoop Datanode无法通过集群启动脚本正常启动
Hadoop启动脚本无法自动拉起主节点Datanode问题修复方案
手动执行hdfs datanode可以正常启动Datanode,说明Datanode本身的目录权限、集群ID、核心配置没有问题,故障点集中在启动脚本的执行链路环节,之前尝试的删除datanode目录、格式化namenode是解决主从节点集群ID不匹配问题的方案,和当前故障场景不匹配,所以无效。
排查&修复步骤
- 检查节点角色配置文件
如果部署架构为主节点同时运行Datanode进程,必须将主节点的主机名准确添加到${HADOOP_HOME}/etc/hadoop/workers配置文件中(Hadoop 2.x旧版本对应文件为${HADOOP_HOME}/etc/hadoop/slaves),文件内一行一个节点的主机名/IP,不要留多余空格、特殊字符,配置完成后执行hostname核对返回值,确保文件内填写的主节点主机名和系统实际主机名完全一致。注意:不要在workers文件里给节点地址加前缀或者多余注释,否则脚本会识别为非法节点地址,跳过对应节点的进程启动。
- 修复本地SSH免密登录配置
start-dfs.sh/start-all.sh是通过SSH协议远程连接所有配置的节点执行启动命令,哪怕是主节点自身也会走SSH本地回环连接,很多部署场景只配置了主节点到从节点的免密登录,漏配主节点到自身的免密,会导致脚本无法在主节点远程拉起Datanode:- 直接执行
ssh 你的主节点主机名,如果连接时要求输入密码,说明免密配置缺失 - 执行
ssh-copy-id 你的主节点主机名,按提示输入一次节点密码完成公钥下发,之后再次执行SSH连接命令不需要输入密码即为配置成功 - 额外核对权限:
~/.ssh目录权限必须为700,目录下authorized_keys文件权限必须为600,权限不符合要求时SSH会自动拒绝公钥认证,导致免密失效。
- 直接执行
- 补全启动脚本的环境变量配置
SSH远程执行命令时不会自动加载用户家目录下.bashrc、.bash_profile中配置的环境变量,会导致脚本启动进程时找不到JAVA、Hadoop的路径,甚至因为用户权限参数缺失直接在初始化阶段退出,这也是故障时Datanode日志为空的核心原因——进程还没走到初始化日志模块的步骤就退出了:- 编辑
${HADOOP_HOME}/etc/hadoop/hadoop-env.sh文件,在文件头部显式添加以下固定配置,路径替换为你部署环境的实际绝对路径,不要用相对路径:# 替换为实际的JDK安装路径 export JAVA_HOME=/usr/local/jdk1.8.0_341 # 替换为实际的Hadoop安装路径 export HADOOP_HOME=/usr/local/hadoop-3.3.6 # 以下为启动用户配置,如果用root启动就保持root,用其他用户就替换为对应的用户名 export HDFS_NAMENODE_USER=root export HDFS_DATANODE_USER=root export HDFS_SECONDARYNAMENODE_USER=root export YARN_RESOURCEMANAGER_USER=root export YARN_NODEMANAGER_USER=root - 配置完成后给所有Hadoop脚本加执行权限:
chmod +x ${HADOOP_HOME}/sbin/* ${HADOOP_HOME}/bin/*
- 编辑
- 验证修复效果
先执行stop-all.sh停掉所有已运行的Hadoop进程,执行jps确认没有残留的NameNode、DataNode、ResourceManager等进程后,重新执行start-dfs.sh启动集群,脚本执行完成后再跑jps核对进程列表,就能看到主节点上的Datanode进程正常拉起,对应的日志文件也会正常生成在${HADOOP_HOME}/logs目录下。
内容的提问来源于stack exchange,提问作者MiCh
相关产品推荐
相关产品推荐

