在Google Cloud Composer中使用airflow-dbt生成dbt文档出现文件丢失问题
故障根因
文件被删除是Cloud Composer的内置同步机制导致的。gcs-syncd是Cloud Composer默认运行的后台进程,核心作用是维持GCS桶的dags目录与worker节点本地/home/airflow/gcs/dags路径的双向一致。所有仅存在于本地、未同步到远端GCS dags目录的文件,都会被该进程自动清理,这就是生成的catalog.json刚写完就消失的原因。
解决方案
- 调整dbt输出路径:不要将target目录配置在
/home/airflow/gcs/dags路径下,改为/tmp目录下的自定义路径(比如/tmp/dbt/target),该路径不受gcs-syncd管控,生成的文件不会被自动删除。 - 手动同步文档到GCS:在DbtDocsGenerateOperator任务后追加文件同步任务,使用Airflow的GCSHook或GoogleCloudStorageUploadOperator,将
/tmp下生成的所有dbt文档文件(包括catalog.json、manifest.json、index.html等)上传到指定的GCS存储路径。如果需要将文档放在dags目录下,可提前在GCS的dags目录中创建target文件夹,保证远端路径存在,本地生成的文件同步后就不会被清理。 - 直接修改算子配置:声明DbtDocsGenerateOperator时,显式传入
target_dir参数指定为/tmp下的路径,避免默认写入dags目录的target文件夹。
内容的提问来源于stack exchange,提问作者Jose Bagatelli
相关产品推荐
相关产品推荐

