【问题标题】:Run a shell script file with Airflow on Google Cloud Composer在 Google Cloud Composer 上使用 Airflow 运行 shell 脚本文件
【发布时间】:2021-07-01 15:30:05
【问题描述】:

我有几个多用途的 shell 脚本存储在 .sh 文件中。我的目的是在 Cloud Composer 上构建一些 Airflow DAG,以利用这些脚本。 DAG 将主要由 BashOperators 组成,它们使用特定参数调用脚本。

这是一个简单的例子,greeter.sh

#!/bin/bash
echo "Hello, $1!"

我可以像这样在本地运行它:

bash greeter.sh world
> Hello, world!

让我们写一个简单的 DAG:

# import and define default_args

dag = DAG('bash_test',
          description='Running a local bash script',
          default_args=default_args,
          schedule_interval='0,30 5-23 * * *',
          catchup=False,
          max_active_runs=1)

bash_task = BashOperator(
    task_id='run_command',
    bash_command=f"bash greeter.sh world",
    dag=dag
)

但是将脚本greeter.sh 放在哪里?我尝试将它放在dags/ 文件夹和data/ 文件夹中,在第一级或嵌套在dependencies/ 目录中。我还尝试将地址写为./greeter.sh。毫无意义:我永远找不到文件。

我还尝试使用sh 代替bash,但我得到一个不同的错误:sh: 0: Can't open greeter.sh。但是当文件不存在时也会出现这个错误,所以这是同样的问题。与任何尝试运行 chmod +rx 相同。

如何使我的文件可供 Airflow 使用?

【问题讨论】:

  • 使用/full/path/to/greeter.sh 有效吗? (仅供参考,我对气流没有经验)。祝你好运!
  • 我不确定完整路径是什么或如何找到它,composer 环境似乎在 Kubernetes Engine 实例中运行,我找不到通过 SSH 访问它的方法

标签: bash airflow google-cloud-composer


【解决方案1】:

this question 的 cmets 揭晓了答案。

dags_folder 的地址存储在DAGS_FOLDER 环境变量中。

要获取存储在dags_folder/ 中的脚本的正确地址:

import os

DAGS_FOLDER = os.environ["DAGS_FOLDER"]
file = f"{DAGS_FOLDER}/greeter.sh"

【讨论】:

    猜你喜欢
    • 2019-06-26
    • 1970-01-01
    • 2018-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多