You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker部署HDFS后通过Airflow连接失败的问题求助

问题解决方案

一、HDFS连接拒绝问题

1. 确保网络互通

  • 如果Airflow运行在Docker容器中:将Airflow容器加入Hadoop/Spark集群所在的Docker网络。先通过docker network ls找到项目创建的网络(通常名称类似docker-hadoop-spark_default),再执行docker network connect <network-name> <airflow-container-id>。
  • 如果Airflow在本地运行:
    • 修改Hadoop namenode的绑定地址:进入namenode容器,编辑$HADOOP_HOME/etc/hadoop/core-site.xml,将fs.defaultFS的值改为hdfs://0.0.0.0:9000,然后重启namenode服务。
    • 检查主机防火墙是否开放9000端口,确保本地能访问namenode的9000端口。

2. 显式配置Spark的HDFS参数

在构建SparkSession时,直接指定HDFS的地址,避免依赖容器内部的hostname解析:

spark = (SparkSession
        .builder
        .master("spark://127.0.0.1:7077")
        .appName("Test")
        .config("fs.defaultFS", "hdfs://172.19.0.9:9000")  # 替换为你的namenode容器IP
        .getOrCreate())

另外,将Hadoop的core-site.xml和hdfs-site.xml文件复制到Airflow环境的Spark配置目录(如$SPARK_HOME/conf/),确保Spark能读取到正确的Hadoop配置。

3. 验证连通性

  • 在namenode容器中执行hdfs dfsadmin -report,确认namenode正常运行且9000端口处于监听状态。
  • 在Airflow环境中执行nc -zv 172.19.0.9 9000(或telnet 172.19.0.9 9000),测试是否能连通namenode的9000端口。如果不通,优先排查网络配置。

二、Spark序列化版本不兼容问题

这个错误是因为Airflow环境中的Spark版本与集群中的Spark版本不一致导致的,解决步骤:

  1. 检查版本一致性:查看集群中Spark的版本(进入spark-master容器执行spark-submit --version),确保Airflow环境(或SparkOperator使用的镜像)的Spark版本与集群完全相同(包括小版本,比如3.3.0必须对应3.3.0,不能是3.3.1)。
  2. 统一Spark镜像:如果使用Airflow的SparkOperator,指定与集群相同的Spark镜像,避免版本差异。
  3. 清理缓存:删除Spark集群的work目录(通常在容器内的$SPARK_HOME/work/),重启Spark集群和Airflow,清除旧的序列化类残留。

内容的提问来源于stack exchange,提问作者Марсель Абдуллин

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 21:01:11