从Airflow连接Spark Standalone集群失败求助
验证容器网络连通性
进入Airflow Worker容器,执行ping spark-master,确认能解析到Spark Master容器的IP并正常连通;再用nc -zv spark-master 7077测试7077端口是否开放。如果不通,用docker network inspect <你的网络名称>检查两个容器是否真的在同一Docker网络中。检查Spark Master监听地址
进入Spark Master容器,执行netstat -tulpn | grep 7077,确认服务监听地址是0.0.0.0:7077而非127.0.0.1:7077。如果是本地回环地址,需修改spark-env.sh,添加SPARK_MASTER_HOST=0.0.0.0后重启Master服务。确认Master的广播地址配置
查看Spark Master启动日志,找到类似Starting Spark master at spark://xxx:7077的条目,确认广播地址与你使用的spark://spark-master:7077一致。如果不一致,在spark-env.sh中添加SPARK_MASTER_ADVERTISED_ADDRESS=spark-master,重启Master。排查Airflow Worker的Spark配置
检查Airflow Worker内的spark-defaults.conf,确认spark.master参数是否正确设置为spark://spark-master:7077;同时查看DAG中SparkOperator的配置,避免任务级参数覆盖了--master命令行参数。执行spark-submit时加上--verbose,查看日志里实际使用的Master地址。验证Spark集群状态
通过Spark Master的WebUI(localhost:8090)确认Master处于ALIVE状态,且有Worker节点正常注册。如果Master未启动或无可用Worker,也会导致提交失败。测试DNS解析与IP直连
在Airflow Worker容器中执行nslookup spark-master,确认能正确解析到Master容器IP。如果解析失败,尝试直接用Master容器的IP替换spark-master,执行spark-submit --master spark://<master-ip>:7077 ./dags/my-script.py测试。
内容的提问来源于stack exchange,提问作者Yash Agrawal

