Airflow DAG中Spark-Kafka消费者任务失败:无法连接Spark Master
问题排查与解决方案
一、先确认Spark Master的网络可达性
- 直接在Airflow容器里执行
telnet spark-master 7077或者nc -zv spark-master 7077,看看能不能连通。要是连不上,先查Docker网络:- 确认Airflow容器和Spark Master容器在同一个Docker网络里
- 用
docker ps看Spark Master容器是不是正常启动,再用docker logs spark-master查启动日志,有没有启动失败的报错
- 要是网络能通,再看Spark Master的监听地址:
- 翻Spark Master的启动日志,确认它绑定的是
spark-master主机名,别是绑定到localhost了,不然容器外访问不了 - 修改Spark Master的
spark-env.sh,加上SPARK_MASTER_HOST=spark-master,强制它绑定正确的地址
- 翻Spark Master的启动日志,确认它绑定的是
二、检查Spark任务的初始化配置
- 确认SparkSession的master参数写对了,比如:
别写成spark = SparkSession.builder \ .master("spark://spark-master:7077") \ .appName("KafkaConsumer") \ .getOrCreate()local[*]或者其他错误地址 - 加上
spark.driver.host配置,因为Airflow容器里跑Spark任务,Worker得能访问到Driver:- 在SparkSession里加
.config("spark.driver.host", "<airflow容器IP>"),或者直接设置环境变量SPARK_DRIVER_HOST - 要拿Airflow容器IP,直接在容器里跑
hostname -i就行
- 在SparkSession里加
三、解决MetricsSystem初始化异常
- 这个问题一般是Spark指标系统初始化失败,大概率和权限或配置有关:
- 检查Spark任务运行用户对
/tmp/spark-*这类临时目录有没有读写权限 - 看Spark的
metrics.properties配置文件,有没有写错的Sink配置,比如不存在的指标输出端 - 要是用Docker部署,确认
SPARK_CONF_DIR挂载的配置文件没丢,路径也对
- 检查Spark任务运行用户对
四、Airflow Spark Operator配置检查
- 确认Airflow里用的
SparkSubmitOperator参数没毛病:master必须设成spark://spark-master:7077- 要是用
client部署模式,确保Airflow容器能访问Spark Master;用cluster模式的话,Spark集群得能拿到你提交的jar包或代码文件
- 检查Airflow的环境变量,
SPARK_HOME和PYSPARK_PYTHON有没有设对,保证Spark依赖路径正确
五、深挖日志找细节
- 从错误日志里把MetricsSystem的具体异常信息抠出来,比如是不是缺类、端口被占这类具体问题
- 看看Spark Worker的日志,确认Worker有没有成功注册到Master,有没有注册失败的报错
内容的提问来源于stack exchange,提问作者Gizelly
相关产品推荐
相关产品推荐

