Spark Standalone集群Python任务执行失败求助
Spark Standalone集群Executor无法连接Master:UnknownHostException解决方案
问题场景
搭建了1台Master节点+4台Worker节点的Spark Standalone集群,提交任务后Master能将应用分发至Worker,但执行时抛出核心异常:java.net.UnknownHostException: 4103b8ddce96,单机运行相同任务无问题。
核心原因
Worker节点无法解析Master节点的主机名4103b8ddce96(该名称大概率是容器随机生成的ID),导致Executor无法与Master建立RPC连接。
解决方案
1. 配置集群节点主机名解析
- 在所有Worker节点的
/etc/hosts文件中添加Master节点的IP与主机名映射:echo "{master-node-ip} 4103b8ddce96" >> /etc/hosts - 若为容器化部署(如Docker),可通过自定义网络实现容器间主机名自动解析,或启动容器时添加映射:
docker run --add-host=4103b8ddce96:{master-node-ip} ...
2. 强制Spark Master绑定固定IP/主机名
- 修改Master节点
$SPARK_HOME/conf/spark-env.sh文件,添加以下配置:export SPARK_MASTER_HOST={固定主机名或IP地址} export SPARK_MASTER_PORT=7078 - 重启Spark Master服务:
重启后Worker将连接到固定地址,避免依赖随机生成的主机名。$SPARK_HOME/sbin/stop-master.sh $SPARK_HOME/sbin/start-master.sh
3. 提交任务时使用可解析的Master地址
确保spark-submit命令的--master参数使用所有节点都能解析的固定地址:
spark-submit --master spark://{固定主机名或IP}:7078 --files ./config.json --jars ./jars/mssql-jdbc-12.2.0.jre8.jar,./jars/vertica-jdbc-12.0.4-0.jar --py-files ./Packages.zip job_build.py
4. 验证网络连通性
- 在每个Worker节点执行
ping 4103b8ddce96,确认能解析到Master的IP并正常连通 - 测试RPC端口连通性:
telnet {master-node-ip} 36101,确保端口未被防火墙拦截
单机运行正常的原因
单机环境下,Spark Master与Executor进程均在同一节点,通信使用本地回环地址或localhost,无需跨节点解析主机名,因此不会触发该异常。
内容的提问来源于stack exchange,提问作者rajk
相关产品推荐
相关产品推荐

