如何使用 Cloud Composer/Apache Airflow 运行带有设置文件的 Dataflow 管道?

Mel*_*Guo 2 python-2.7 google-cloud-dataflow airflow google-cloud-composer

我有一个工作数据流管道,第一次运行setup.py以安装一些本地帮助程序模块。我现在想使用 Cloud Composer/Apache Airflow 来调度管道。我已经创建了 DAG 文件,并将其与管道项目一起放置在指定的 Google Storage DAG 文件夹中。文件夹结构如下所示:

{Composer-Bucket}/
    dags/
       --DAG.py
       Pipeline-Project/
           --Pipeline.py
           --setup.py
           Module1/
              --__init__.py
           Module2/
              --__init__.py
           Module3/
              --__init__.py
Run Code Online (Sandbox Code Playgroud)

我的 DAG 中指定 setup.py 文件的部分如下所示:

resumeparserop = dataflow_operator.DataFlowPythonOperator(
    task_id="resumeparsertask",
    py_file="gs://{COMPOSER-BUCKET}/dags/Pipeline-Project/Pipeline.py",
    dataflow_default_options={
        "project": {PROJECT-NAME},    
        "setup_file": "gs://{COMPOSER-BUCKET}/dags/Pipeline-Project/setup.py"})
Run Code Online (Sandbox Code Playgroud)

但是,当我查看 Airflow Web UI 中的日志时,出现错误:

RuntimeError: The file gs://{COMPOSER-BUCKET}/dags/Pipeline-Project/setup.py cannot be found. It was specified in the --setup_file command line option.
Run Code Online (Sandbox Code Playgroud)

我不确定为什么找不到安装文件。如何使用设置文件/模块运行我的数据流管道?

小智 5

如果您查看DataflowPythonOperator的代码,您会发现主 py_file 可以是 GCS 存储桶内的文件,并且在执行管道之前由操作员本地化。但是,我没有看到 dataflow_default_options 类似的内容。看起来这些选项只是简单地复制和格式化。

由于 GCS dag 文件夹是使用Cloud Storage Fuse安装在 Airflow 实例上的,因此您应该能够使用“dags_folder”环境变量在本地访问该文件。即你可以这样做:

from airflow import configuration
....
LOCAL_SETUP_FILE = os.path.join(
configuration.get('core', 'dags_folder'), 'Pipeline-Project', 'setup.py')
Run Code Online (Sandbox Code Playgroud)

然后,您可以将 LOCAL_SETUP_FILE 变量用于 dataflow_default_options 中的 setup_file 属性。