我们的项目在客户的基础设施上运行,其中基础设施通过Kubernetes和Terraform进行管理。我们使用Airflow自动化我们的工作。
任何带有DBT的Airflow都使用Airflow中提供的KubernetesPodOperator运行。我们计划为每个客户端的表创建数据沿袭图。
我看到了这个链接
How to setup dbt UI for data lineage?
使用下面的2个命令,我可以在我的本地机器上生成DBT数据文档。
dbt docs generage
dbt docs serve --port 8081
现在我需要在任何客户端位置生成相同的。所以我写了DAG如下所示:
sync_data_lineage = KubernetesPodOperator(namespace='etl',
image=f'blotout/dbt-analytics:{TAG_DBT_VERSION}',
cmds=["/usr/local/bin/dbt"],
arguments=['docs', 'generate'],
env_vars=env_var,
name="sync_data_lineage",
configmaps=['awskey'],
task_id="sync_data_lineage",
get_logs=True,
dag=dag,
is_delete_operator_pod=True,
)
deploy_lineage_graph = KubernetesPodOperator(namespace='etl',
image=f'blotout/dbt-analytics:{TAG_DBT_VERSION}',
cmds=["/usr/local/bin/dbt"],
arguments=['docs', 'serve', '--port', '8081'],
env_vars=env_var,
name="deploy_lineage_graph",
configmaps=['awskey'],
task_id="deploy_lineage_graph",
get_logs=True,
dag=dag,
is_delete_operator_pod=True,
)
sync_data_lineage >> deploy_lineage_graph
现在第一个任务成功运行,但当第二个任务运行时,它找不到catalog.json,这是由第一个任务'sync_data_lineage'创建的。原因是一旦第一个DBT命令运行并生成catalog.json,pod就会被销毁。第二个任务在第二个pod中运行,因此无法在第一步中将文档部署为catalog.json。
我该如何解决这个问题?
1条答案
按热度按时间mccptt671#
尝试将DBT工件保存在S3或其他外部存储器上。