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

Docker中运行Airflow2.0+集成OpenLineage与Marquez的配置方案

问题汇总

部署环境:基于CeleryExecutor的Airflow 2.0+ Docker集群,使用官方提供的docker-compose模板部署,目标是运行Marquez官方仓库examples/airflow路径下的示例DAG,通过OpenLineage对接Marquez实现数据血缘能力
已做操作:

  • 在项目.env中配置了OpenLineage相关环境变量
  • 拉取Marquez官方仓库代码,按README指引启动Marquez服务,预期OpenLineage、Marquez API监听5000端口
    异常现象:
  • 访问localhost:3000的Marquez UI,无任何作业血缘记录
  • 执行airflow-init初始化流程时报错:No module named 'openlineage',无法加载lineage段配置的backend项openlineage.lineage_backend.OpenLineageBackend,初始化容器以状态码1退出
  • 控制台提示存在airflow-docker_marquez_1、airflow-docker_marquez_web_1两个孤立容器

根因
  1. Airflow官方默认Docker镜像未预装openlineage-airflow依赖包,直接配置lineage backend会因模块缺失导致初始化失败
  2. Airflow集群和Marquez服务通过两个独立的docker-compose命令启动,属于不同的项目栈,网络默认隔离,Airflow容器无法访问到Marquez的5000 API端口,就算依赖装完也发不出血缘事件
  3. 两个孤立容器是因为Marquez栈单独启动时未纳入当前Airflow的compose项目管理,资源生命周期和网络配置不互通
  4. 仅在.env文件配置变量无法保证所有Airflow核心服务(scheduler、worker、webserver、triggerer)都拿到OpenLineage相关配置,且容器内错误使用localhost作为服务地址会导致访问不通

修复步骤

1. 补装OpenLineage依赖

两种方案选一个即可:

  • 快速验证方案:在docker-compose.yaml的x-airflow-common公共配置块中,给所有Airflow服务的启动前置步骤加安装命令,比如在入口点执行前运行pip install openlineage-airflow,注意版本和你部署的Airflow大版本对齐即可
  • 生产推荐方案:自定义Airflow镜像,新建Dockerfile内容如下:
# 把基础镜像版本替换成你实际使用的Airflow版本
FROM apache/airflow:2.8.1
RUN pip install --no-cache-dir openlineage-airflow

把compose中原来的Airflow镜像配置改成build指向该Dockerfile的路径,后续重新构建镜像即可。

2. 清理孤立容器,统一服务栈配置

先停掉所有运行中的容器:

  • 在Airflow的compose目录执行docker compose down,需要保留已有Airflow元数据就不要加-v参数
  • 进入Marquez代码的docker compose目录,执行docker compose down,清理掉之前单独启动的Marquez相关容器,解决孤立容器提示问题

不要单独启动Marquez服务,把Marquez、Marquez Web、Marquez依赖的PostgreSQL服务定义直接复制到Airflow的docker-compose.yaml中,保证所有服务在同一个docker网络下,确认端口映射配置:

  • Marquez API:5000:5000
  • Marquez Web UI:3000:3000

3. 修正OpenLineage配置

在x-airflow-common的environment配置块下,追加以下环境变量,保证所有Airflow服务都能加载到配置:

AIRFLOW__LINEAGE__BACKEND: openlineage.lineage_backend.OpenLineageBackend
# 注意这里必须用Marquez在compose内的服务名做访问地址,不能写localhost,容器内localhost指向容器自身
OPENLINEAGE_URL: http://marquez:5000
OPENLINEAGE_NAMESPACE: airflow # 可自定义命名空间

4. 重启验证

  1. 执行docker compose build重新构建带OpenLineage依赖的Airflow镜像
  2. 执行docker compose up airflow-init重新跑初始化流程,确认不再报模块缺失的错误
  3. 执行docker compose up -d启动所有服务
  4. 等所有服务健康检查通过后,触发示例DAG运行,DAG执行完成后刷新Marquez UI即可看到对应的作业和血缘记录

排查提示

如果还是看不到血缘数据,可按以下顺序排查:

  • 进入任意Airflow核心容器(scheduler/worker),执行curl http://marquez:5000/api/v1/namespaces,确认能正常返回Marquez API响应,不通就检查服务名和网络配置
  • 查看scheduler、worker的服务日志,有没有OpenLineage事件发送失败的报错,根据报错调整配置
  • 确认运行的示例DAG是对应Airflow 2.0+的适配版本,旧版DAG示例可能存在上报逻辑不兼容的问题

内容的提问来源于stack exchange,提问作者Dier Hou

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 20:12:17