繁体   English   中英

GCP Composer:在另一个 GCS 存储桶中运行 Python 脚本

[英]GCP Composer: Run Python Script in another GCS bucket

我是 Airflow 的新手,我正在尝试运行一个 python 脚本,该脚本从 Bigquery 读取数据,进行一些预处理,然后将表导出回 Bigquery。 这是我的狗

from airflow.models import DAG
from airflow.operators.bash import BashOperator
from datetime import datetime, timedelta

YESTERDAY = datetime.now() - timedelta(days=1)

default_args = {
   'owner': 'me',
   'depends_on_past': False,
   'start_date': YESTERDAY,
   'email': [''],
   'email_on_failure': False,
   'email_on_retry': False,
   'retries': 0,
   'max_tries': 0,
}

with DAG(
   dag_id = 'my_code',
   default_args = default_args,
   schedule_interval = '@daily',
   catchup  = False
) as dag:

   import data = BashOperator(
          task_id = 'daily_task',
          bash_command = 'python gs://project_id/folder1/python_script.py'
         )

这给出了“找不到这样的文件或目录”的错误。 我没有在 Composer 中设置环境,所以我不确定它是否需要特定的凭据。 我尝试将脚本存储在 dags 文件夹中,但它无法访问 bigquery 表。

我有两个问题:

  1. 如何在另一个 GCS 存储桶中正确定义 python 脚本的位置? 如果应用了适当的凭据,gs 位置是否应该工作? 或者我是否必须将脚本存储在 dags 文件夹内的文件夹中?
  2. 我如何在 DAG 中提供正确的凭据(如登录 ID 和密码),以防解决问题所需的一切?

我手写了代码,因为原件在工作笔记本电脑中,我无法复制。 让我知道是否有任何错误。 谢谢!

为了解决您的问题,我向您推荐一个在我看来更易于管理的解决方案。 只要有可能,最好在 Composer's Bucket 中使用 Python 脚本。

  • 使用 Composer (gcloud) 之外的单独进程或直接在 DAG 中将Python脚本复制到Composer存储桶和DAG文件夹中。 如果你想在DAG中这样做,你可以从这个链接中检查
  • 使用Python运算符在DAG中调用您的Python脚本
  • Composer使用的Service Account需要具有良好的权限才能将数据读写到BigQuery 如果直接在DAG中复制Python脚本,则 SA 需要具有从项目 2 中的GCS下载文件的权限。
from your_script import your_method_with_bq_logic
   
with airflow.DAG(
        'your_dag',
        default_args=your_args,
        schedule_interval=None) as dag:
    
    
    bq_processing = PythonOperator(
        task_id='bq_processing',
        python_callable=your_method_with_bq_logic
    )

    bq_processing

您可以在代码中导入Python脚本 main 方法,因为它存在于DAG文件夹中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM