Spark独立集群Executor无法连接Driver:连接被拒绝问题排查
Spark高可用集群连接拒绝问题分析与解决方案
1. 连接拒绝错误的可能原因
- Master内部通信端口的绑定或访问问题:Spark Master会随机分配一个内部端口用于与Executor通信(如45407),若该端口仅绑定本地回环地址(127.0.0.1),或端口未在集群节点间开放,Executor将无法连接。
- 高可用模式下的Master角色同步异常:若当前Active Master已切换至s2,但Executor仍尝试连接旧Standby节点s1的端口,而s1作为Standby已关闭该通信端口。
- 配置中的地址指向错误:Worker或Executor获取的Master地址为固定的s1,而非ZK集群的高可用地址,导致无法感知Master角色切换。
- Master进程内部通信线程异常:虽然Master进程显示运行正常,但负责处理Executor连接的线程已挂死,或端口被其他进程占用。
2. spark-env.sh配置的常见问题排查
先给出高可用模式下的核心配置示例,再指出可能的错误点:
# 正确的核心配置示例 export SPARK_MASTER_HOST=10.1.1.21 # 或绑定0.0.0.0,禁止设为localhost export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER \ -Dspark.deploy.zookeeper.url=zk-node1:2181,zk-node2:2181,zk-node3:2181 \ -Dspark.deploy.zookeeper.dir=/spark-ha" export SPARK_LOCAL_IP=10.1.1.x # 各节点绑定自身集群IP export SPARK_WORKER_CORES=4 export SPARK_WORKER_MEMORY=8g
可能存在的问题:
SPARK_MASTER_HOST设为localhost:导致Master仅绑定本地回环地址,其他节点无法访问其随机分配的通信端口。- 缺失
spark.deploy.recoveryMode=ZOOKEEPER配置:高可用模式未生效,Executor无法通过ZK获取Active Master的正确地址。 - 未设置
SPARK_LOCAL_IP:节点可能绑定错误的网卡地址,导致Master与Worker/Executor的通信路径异常。
3. 进一步排查与解决步骤
- 验证Master端口绑定情况:在s1节点执行
netstat -tulpn | grep org.apache.spark.deploy.master.Master,查看45407端口的绑定地址,确认是否为10.1.1.21而非127.0.0.1。若绑定localhost,修改SPARK_MASTER_HOST为集群可访问IP,重启Master。 - 确认当前Active Master:访问s1和s2的Spark Master Web UI(默认8080端口),查看节点角色。若Active为s2,检查Executor的
spark.master配置是否指向ZK集群地址,而非固定s1地址。 - 固定Master通信端口:在
spark-env.sh中添加以下配置,避免随机端口带来的不确定性:
重启Master后,在Worker节点执行export SPARK_MASTER_PORT=7077 export SPARK_MASTER_OPTS="-Dspark.master.rest.port=6066 -Dspark.master.internal.port=45407"nc -zv s1 45407测试端口连通性。 - 检查Executor的Master配置:查看Executor日志中的
spark.master参数,确认是否为spark://zk://zk-node1:2181,zk-node2:2181,zk-node3:2181,若为固定s1:7077,修改spark-defaults.conf中的spark.master为ZK地址。 - 查看Master日志细节:在s1的Spark日志目录(默认
$SPARK_HOME/logs)下,搜索45407或connection refused,排查是否有端口绑定失败、线程异常等信息。 - 重启集群同步状态:若怀疑ZK与Spark节点状态不同步,依次重启ZK集群、所有Master节点、所有Worker节点,再重新提交任务测试。
内容的提问来源于stack exchange,提问作者sparknotworkinguwu
相关产品推荐
相关产品推荐

