Windows下Hadoop执行start-all.cmd时worker节点datanode未自动启动排查
问题核心原因
Windows环境下Hadoop的.cmd启动脚本和Linux下的.sh脚本逻辑存在原生差异,且部署时极易遗漏三个关键前置配置,最终导致主节点执行启动命令时,无法远程触发worker节点的DataNode进程初始化。
可落地解决步骤
- 配置主节点到所有worker节点的Windows原生免密SSH
不要依赖第三方SSH客户端,统一用Windows自带OpenSSH组件配置:- 所有节点(主节点+所有worker节点)在系统可选功能中安装OpenSSH Server,将对应服务设置为开机自动启动,放通防火墙22端口规则
- 主节点执行
ssh-keygen -t rsa生成RSA密钥对,全程回车不设置私钥密码,将生成的C:\Users\运行Hadoop的用户名\.ssh\id_rsa.pub文件内容,全量追加到每个worker节点对应用户目录下的.ssh\authorized_keys文件中 - 主节点直接执行
ssh 对应worker节点主机名测试,无需输入密码即可直接登录到worker节点才算配置生效。所有节点运行Hadoop的Windows用户名必须完全一致,否则SSH默认携带当前用户名发起连接会直接认证失败。
- 补全hadoop-env.cmd关键参数
打开%HADOOP_HOME%\etc\hadoop\hadoop-env.cmd文件,追加以下配置:
第一行配置用于跳过SSH首次连接的主机指纹校验,避免脚本执行SSH时卡在交互确认环节直接超时;第二行配置用于给worker节点进程启动预留缓冲间隔,避免并发拉起进程时资源抢占启动失败。set HADOOP_SSH_OPTS= -o StrictHostKeyChecking=no set HADOOP_WORKERS_SLEEP=1 - 修复原生启动脚本缺失的逻辑
Hadoop 3.x版本自带的start-dfs.cmd、start-yarn.cmd默认仅编写了拉起本地进程的逻辑,没有遍历workers文件远程执行启动命令的代码段,需要手动补充:
打开%HADOOP_HOME%\sbin\start-dfs.cmd,在本地DataNode启动逻辑前新增如下代码:
如果需要同步自动启动NodeManager,同理在rem 远程拉起所有worker节点DataNode进程 for /f "delims=" %%w in (%HADOOP_HOME%\etc\hadoop\workers) do ( if not "%%w" == "" ( start ssh %%w "%HADOOP_HOME%\sbin\hadoop-daemon.cmd start datanode" ) )start-yarn.cmd中新增遍历workers的逻辑,将启动命令替换为hadoop-daemon.cmd start nodemanager即可。 - 前置校验注意项
所有节点的Hadoop安装路径必须完全一致,禁止使用带中文、空格的目录名,否则远程执行脚本时会出现路径解析失败、找不到命令的问题。配置完成后先执行stop-all.cmd清理所有节点残留进程,再重新执行start-all.cmd,等待10秒左右即可通过8088、9870端口的webUI看到所有worker节点的DataNode、NodeManager正常注册。
内容的提问来源于stack exchange,提问作者Sanjay Bhanushali
相关产品推荐
相关产品推荐

