spark-standalone搭建节点间无法建立链接-node: Permission denied, please try again.

本文介绍如何在Spark集群中配置worker节点并实现节点间的免密登录。通过使用ssh-keygen生成公钥并将其添加到authorized_keys文件中,可以避免在启动Spark集群时输入密码,从而提高部署效率。
root@node01:/usr/lib/spark/spark-3.1.2-bin-hadoop3.2# sbin/start-workers.sh 
root@node02's password: 
root@node01's password: node01: Permission denied, please try again.

解决
使用公钥链接,在每个节点执行一下命令

ssh-keygen #在节点中生成公钥,一直按enter即可
cat  /.ssh/id_rsa.pub >> ~/.ssh/authorized_keys# 将公钥存到同一个公钥包中

注意将所有节点的公钥都放在同一个/.ssh/authorized_keys中,并复制保存在每个节点的/.ssh/authorized_keys
使用命令验证

ssh node01

图片

<think>我们正在解决Spark启动失败的问题,具体错误是:在启动Spark集群时,Master进程已经在运行,并且尝试SSH连接到sias03节点时出现“No route to host”错误。根据用户提供的日志,我们注意到以下关键点: 1. 启动Master时,日志显示已经有一个Master进程在运行(logging to .../spark-root-org.apache.spark.deploy.master.Master-1-sias04.out),这可能是之前启动未成功退出的残留进程。 2. 在尝试连接到sias03节点时,出现“No route to host”错误,这通常表示网络不通或目标主机不可达。 因此,我们需要解决两个主要问题: 1. 清理已有的Master进程,避免端口冲突。 2. 解决与sias03节点的网络连接问题(SSH连接失败)。 ### 解决方案步骤 #### 步骤1: 停止所有Spark进程 首先,我们需要停止所有正在运行的Spark进程,包括可能残留的Master和Worker进程。 ```bash # 在Master节点(sias04)上执行 $SPARK_HOME/sbin/stop-all.sh ``` 如果上述命令无法停止(因为集群状态异常),可以手动停止: ```bash # 查找并杀死Java进程(包含Master和Worker) jps | grep -E 'Master|Worker' | awk '{print $1}' | xargs kill -9 ``` > **注意**:同样需要在所有Worker节点上执行上述手动停止命令(如果存在Worker进程)。 #### 步骤2: 检查并修复网络连接问题 错误信息显示连接sias03节点的22端口失败(No route to host),我们需要检查网络连通性。 **2.1 检查sias03节点状态** - 确认sias03节点是否开机并运行正常。 - 检查sias03节点的IP地址配置是否正确(使用`ip addr`或`ifconfig`)。 **2.2 测试网络连通性** 在sias04节点上执行: ```bash ping sias03 # 如果配置了主机名解析 # 或者直接ping sias03的IP地址 ping <sias03_IP> ``` 如果ping不通,说明网络层有问题,需要检查: - 网络硬件(网线、交换机) - 节点防火墙设置(是否屏蔽了ICMP或SSH端口) - 路由表(使用`route -n`查看) **2.3 检查SSH服务** 在sias03节点上确认SSH服务运行: ```bash systemctl status sshd ``` 如果未运行,启动服务: ```bash systemctl start sshd ``` **2.4 配置SSH免密登录** Spark要求主节点(sias04)能够无密码SSH登录到所有工作节点(包括sias03)。确保已经设置好免密登录: 1. 在sias04上生成SSH密钥(如果不存在): ```bash ssh-keygen -t rsa ``` 2. 将公钥复制到sias03: ```bash ssh-copy-id root@sias03 ``` 3. 测试免密登录: ```bash ssh sias03 ``` #### 步骤3: 检查Spark配置 确保Spark的配置文件正确设置。 **3.1 检查`slaves`文件** 在`$SPARK_HOME/conf/slaves`文件中,应该包含所有Worker节点的主机名(或IP),例如: ``` sias02 sias03 sias04 ``` **3.2 检查`spark-env.sh`** 在`$SPARK_HOME/conf/spark-env.sh`中设置: ```bash export SPARK_MASTER_HOST=sias04 # 设置为主节点的主机名或IP export SPARK_MASTER_PORT=7077 # 默认端口 ``` #### 步骤4: 解决“Master already running”问题 如果之前有残留的Master进程,我们已经通过步骤1停止。如果问题仍然存在,检查: - 是否有多个Spark实例在运行?确保只启动一个集群- 检查端口冲突:Master默认使用8080(Web UI)和7077(通信端口)。使用以下命令查看端口占用: ```bash netstat -tlnp | grep -E '8080|7077' ``` 如果被其他进程占用,可以停止该进程或修改Spark的端口配置。 #### 步骤5: 重新启动集群 完成上述步骤后,重新启动集群: ```bash $SPARK_HOME/sbin/start-all.sh ``` #### 步骤6: 验证集群状态 访问Master的Web UI:http://sias04:8080 查看所有Worker节点是否正常注册。 ### 常见问题及解决方法 | 问题现象 | 可能原因 | 解决方案 | |----------|----------|----------| | Master启动失败,端口被占用 | 已有Spark或其他进程占用端口 | 停止占用进程或修改`spark-env.sh`中的端口配置 | | Worker节点未显示在Web UI | 网络不通或SSH配置错误 | 检查网络和SSH免密登录配置 | | 启动时提示“No route to host” | 目标节点关机或网络隔离 | 检查节点状态和网络配置 | | 启动时提示“Permission denied” | SSH公钥未正确配置 | 重新配置免密登录 | > **重要提示**:如果使用云环境,请检查安全组规则是否允许节点间的通信(特别是22, 7077, 8080端口)[^1]。 ### 相关问题 §§相关问题§§ 1. 如何配置 Spark on YARN 模式? 2. Spark 集群资源管理器有哪些区别(Standalone vs YARN vs Mesos)? 3. 如何监控 Spark 集群的运行状态? 4. Spark 任务提交失败常见原因及解决方法?</think>### 解决 Spark `start-all.sh` 失败:"Master already running" 和 SSH 连接问题 #### 问题分析 日志显示两个关键错误: 1. **Master 进程已存在**:启动时检测到已有 Master 进程 2. **SSH 连接失败**:`sias03: ssh: connect to host sias03 port 22: No route to host` --- ### 解决方案步骤 #### 1. 清理残留 Master 进程 ```bash # 在 Master 节点 (sias04) 执行 $SPARK_HOME/sbin/stop-all.sh # 尝试正常停止 # 强制终止残留进程 jps | grep "Master" | awk '{print $1}' | xargs kill -9 ``` #### 2. 修复 SSH 连接问题(关键) **2.1 检查 sias03 节点状态** ```bash ping sias03 # 测试网络连通性 nc -zv sias03 22 # 检查 SSH 端口 ``` - 🔴 若不通:检查网络配置(IP/路由)[^2] - 🟢 若通:检查 SSH 服务状态 **2.2 修复 SSH 服务** ```bash # 在 sias03 节点执行 systemctl status sshd # 检查服务状态 systemctl start sshd # 启动服务 systemctl enable sshd # 设置开机自启 ``` **2.3 配置 SSH 免密登录** ```bash # 在 Master 节点 (sias04) 执行 ssh-keygen -t rsa # 生成密钥(回车确认所有选项) ssh-copy-id root@sias03 # 复制公钥到 sias03 # 测试免密登录 ssh sias03 "hostname" # 应返回 sias03 ``` #### 3. 检查 Spark 配置 **3.1 验证 `slaves` 文件** ```bash # $SPARK_HOME/conf/slaves 应包含所有 Worker 节点 cat $SPARK_HOME/conf/slaves ``` 示例: ``` sias02 sias03 sias04 ``` **3.2 检查 `spark-env.sh`** ```bash # 确保配置正确 echo $SPARK_MASTER_HOST # 应返回 sias04 的 IP grep SPARK_MASTER_HOST $SPARK_HOME/conf/spark-env.sh ``` #### 4. 解决端口冲突 ```bash # 检查端口占用(Master 默认 7077/8080) netstat -tlnp | grep -E '7077|8080' # 若被占用: # 选项1:终止占用进程 # 选项2:修改 Spark 端口 echo "export SPARK_MASTER_WEBUI_PORT=9080" >> $SPARK_HOME/conf/spark-env.sh ``` #### 5. 重启集群 ```bash $SPARK_HOME/sbin/start-all.sh # 验证状态 jps | grep -E 'Master|Worker' # 应有 Master + 多个 Worker ``` #### 6. 防火墙配置 ```bash # 所有节点开放端口 sudo firewall-cmd --permanent --add-port={7077,8080,22}/tcp sudo firewall-cmd --reload ``` --- ### 故障排查表 | 现象 | 可能原因 | 解决方案 | |------|----------|----------| | Master 启动失败 | 端口冲突 | 修改 `spark-env.sh` 端口或终止占用进程 | | Worker 未注册 | SSH 免密失败 | 重新配置 `ssh-copy-id` | | "No route to host" | 网络不通/SSH 未启动 | 检查网络配置和 `systemctl status sshd` | | 部分节点连接超时 | 防火墙阻止 | 开放端口或临时关闭防火墙测试 | > **重要提示**:修改配置后需**重启相关服务**。若使用云环境,检查安全组规则是否开放 22/7077/8080 端口[^1]。 --- ### 相关问题
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值