AWS EMR环境下Spark集群start-slaves.sh启动失败求助
Spark start-slaves.sh启动失败排查方案(AWS EMR环境)
环境信息
- Master节点:172.31.1.172
- Slave节点:slave1(172.31.1.11)、slave2(172.31.1.245)
- 已完成配置:/etc/hosts、spark-env.sh、workers/slaves文件;Master可手动SSH登录root@slave1/2,但
start-slaves.sh启动失败,start-master.sh正常。
排查步骤与解决方案
1. 确认脚本执行的用户与SSH密钥匹配
手动SSH使用root用户成功,但start-slaves.sh可能以EMR默认用户(如hadoop或ec2-user)执行,导致密钥不匹配:
- 切换到root用户后重新执行脚本:
sudo su - root && cd ${SPARKPATH}/sbin && ./start-slaves.sh - 或在
spark-env.sh中指定root的SSH密钥:export SPARK_SSH_OPTS="-i /root/.ssh/id_rsa"
2. 校验workers/slaves文件格式
确保文件无多余字符,每个节点单独一行:
- 正确格式示例(
${SPARKPATH}/conf/workers):
或直接使用IP:slave1 slave2172.31.1.11 172.31.1.245 - 若使用
slaves文件,需在spark-env.sh中指定:export SPARK_SLAVES="${SPARKPATH}/conf/slaves"
3. 统一Master与Slave的Spark路径
脚本会远程执行Slave节点的start-slave.sh,路径不一致会导致启动失败:
- 在Master上执行验证命令:
ssh root@slave1 "ls ${SPARKPATH}/sbin/start-slave.sh" - 若返回文件不存在,需同步Slave节点的Spark安装路径,或修改Master的
spark-env.sh中的SPARK_HOME为Slave上的正确路径。
4. 查看启动错误日志
捕获脚本执行的详细错误:
- 执行脚本时输出日志:
./start-slaves.sh > start-slaves-error.log 2>&1 - 查看Slave节点的Spark日志(默认路径
${SPARKPATH}/logs),定位具体报错信息。
5. 关闭SSH主机密钥检查
脚本执行时可能因未缓存主机密钥导致连接中断,在spark-env.sh中添加:
export SPARK_SSH_OPTS="-o StrictHostKeyChecking=no"
6. 验证Slave节点权限与环境
- 确保Slave节点的
${SPARKPATH}目录拥有root权限:ssh root@slave1 "chown -R root:root ${SPARKPATH}" - 检查Slave节点的Java环境变量,确保
JAVA_HOME配置正确(Spark依赖Java环境):ssh root@slave1 "echo $JAVA_HOME"
内容的提问来源于stack exchange,提问作者kodi
相关产品推荐
相关产品推荐

