Docker部署Apache Airflow中dbt工作流运行失败求助
问题:Docker环境下Airflow执行dbt工作流报错(Unexpected EOF while reading bytes)
问题描述
- 作为Apache Airflow和dbt新手,在Docker环境运行Airflow时,执行dbt演示工作流出现错误
- 本地环境可成功运行dbt模型,尝试多种连接配置组合、确认凭证无误后,仍出现相同错误
错误日志(翻译后)
[2024-09-27, 14:50:45 UTC] {subprocess.py:69} INFO - 正在运行命令: ['/usr/local/airflow/dbt_venv/bin/dbt', 'run', '--models', 'my_first_dbt_model', '--project-dir', '/tmp/tmp943gjfck', '--profiles-dir', '/tmp/cosmos/profile/1d390e975d9ea414ab43ddd449486c885400dd6be3d9c4b702d12711ab61e6e4', '--profile', 'default', '--target', 'dev'] [2024-09-27, 14:50:45 UTC] {subprocess.py:80} INFO - 命令输出: [2024-09-27, 14:50:46 UTC] {subprocess.py:90} INFO - 14:50:46 使用dbt=1.8.7运行 [2024-09-27, 14:50:46 UTC] {subprocess.py:90} INFO - 14:50:46 已注册适配器: clickhouse=1.8.4 [2024-09-27, 14:50:46 UTC] {subprocess.py:90} INFO - 14:50:46 因配置文件变更,无法执行部分解析 [2024-09-27, 14:50:47 UTC] {subprocess.py:90} INFO - 14:50:47 找到2个模型,4个数据测试,574个宏 [2024-09-27, 14:50:47 UTC] {subprocess.py:90} INFO - 14:50:47 [2024-09-27, 14:50:47 UTC] {subprocess.py:90} INFO - 14:50:47 [2024-09-27, 14:50:47 UTC] {subprocess.py:90} INFO - 14:50:47 执行完成,耗时0小时0分0.21秒(0.21s) [2024-09-27, 14:50:47 UTC] {subprocess.py:90} INFO - 14:50:47 遇到错误: [2024-09-27, 14:50:47 UTC] {subprocess.py:90} INFO - 数据库错误 [2024-09-27, 14:50:47 UTC] {subprocess.py:90} INFO - 读取字节时遇到意外EOF [2024-09-27, 14:50:48 UTC] {subprocess.py:94} INFO - 命令退出码为2 [2024-09-27, 14:50:48 UTC] {local.py:286} INFO - 读取字节时遇到意外EOF [2024-09-27, 14:50:48 UTC] {local.py:196} WARNING - 制品 schema 版本: https://schemas.getdbt.com/dbt/manifest/v12.json 高于dbt-ol支持的版本7,可能引发错误 [2024-09-27, 14:50:48 UTC] {local.py:389} INFO - 入口: [] [2024-09-27, 14:50:48 UTC] {local.py:390} INFO - 出口: [] [2024-09-27, 14:50:48 UTC] {dag.py:3239} INFO - 同步1个DAG [2024-09-27, 14:50:48 UTC] {dag.py:4180} INFO - 设置dbt_dag的下次运行时间为2024-09-27 00:00:00+00:00,下次触发时间为2024-09-28 00:00:00+00:00 [2024-09-27, 14:50:48 UTC] {local.py:193} ERROR - 14:50:46 使用dbt=1.8.7运行
解决建议
1. 校验Docker网络连通性
- 进入Airflow容器内部,执行
telnet <ClickHouse主机地址> <端口>或nc -zv <ClickHouse主机地址> <端口>,测试容器与数据库的端口连通性 - 若数据库也是Docker容器,确认两者处于同一Docker网络,或使用容器名称/正确的内部IP作为连接地址
2. 适配dbt与依赖版本
- 当前dbt版本1.8.7,dbt-clickhouse适配器版本1.8.4,存在版本适配风险。建议降级到dbt 1.7.x系列,对应使用dbt-clickhouse 1.7.x版本,避免新版本兼容性问题
- 日志提示制品schema版本v12高于dbt-ol支持的v7,这会引发兼容性问题,需使用与dbt-ol兼容的dbt版本
3. 排查临时配置文件问题
- Airflow通过Cosmos生成的临时profiles目录可能存在配置异常。手动将本地可用的
profiles.yml复制到Airflow容器内的临时目录(日志中--profiles-dir指定的路径),再执行dbt命令测试 - 核对临时配置中的
host、port、database、user、password与本地运行时完全一致,避免容器环境下的变量替换错误
4. 调整ClickHouse连接参数
- 在dbt profile中添加连接超时参数,延长连接等待时间:
default: target: dev outputs: dev: type: clickhouse host: <你的主机地址> port: 8123 user: <你的用户名> password: <你的密码> database: <你的数据库> schema: <你的schema> connect_timeout: 30
- 若启用了SSL,尝试添加
secure: false参数禁用SSL,排查是否是SSL握手导致连接中断
5. 查看ClickHouse服务器日志
- 登录ClickHouse服务器,查看
/var/log/clickhouse-server/clickhouse-server.log,检查是否有连接拒绝、权限错误或其他异常,定位问题根源
内容的提问来源于stack exchange,提问作者sup3rgiant
相关产品推荐
相关产品推荐

