hadoop - 如何以 Unix 用户身份运行 Apache Airflow DAG

标签 hadoop airflow apache-airflow

我使用 root 帐户在我的集群上安装了 Apache Airflow。我知道这是不好的做法,但这只是测试环境。我创建了一个简单的 DAG:

from airflow import DAG
from airflow.operators.bash_operator import BashOperator
from datetime import datetime, timedelta

dag = DAG('create_directory', description='simple create directory workflow', start_date=datetime(2017, 6, 1))

t1 = BashOperator(task_id='create_dir', bash_command='mkdir /tmp/airflow_dir_test', dag=dag)

t2 = BashOperator(task_id='create_file', bash_command='echo airflow_works > /tmp/airflow_dir_test/airflow.txt')

t2.set_upstream(t1)

问题是当我运行这个作业时,root 用户执行它。我尝试添加 owner 参数,但它不起作用。 Airflow 说:

Broken DAG: [/opt/airflow/dags/create_directory.py] name 'user1' is not defined

我的问题是,如何使用 root 以外的其他用户运行 Apache Airflow DAG?

最佳答案

您可以使用run_as_user 参数来impersonate任何任务的 unix 用户:

t1 = BashOperator(task_id='create_dir', bash_command='mkdir /tmp/airflow_dir_test', dag=dag, run_as_user='user1')

如果你想将它应用到 DAG 中的每个任务,你可以使用 default_args:

dag = DAG('create_directory', description='simple create directory workflow', start_date=datetime(2017, 6, 1), default_args={'run_as_user': 'user1'})

t1 = BashOperator(task_id='create_dir', bash_command='mkdir /tmp/airflow_dir_test', dag=dag)

t2 = BashOperator(task_id='create_file', bash_command='echo airflow_works > /tmp/airflow_dir_test/airflow.txt')

请注意,owner 参数用于其他用途,multi-tenancy .

关于hadoop - 如何以 Unix 用户身份运行 Apache Airflow DAG,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47012321/

相关文章:

python - 开发 Airflow 时使用的最佳项目结构是什么?

ubuntu - 运行 Airflow 时无法访问 localhost

email - Airflow - 2 个警报发送 on_failure

airflow - Airflow DAG运行已触发,但从未执行?

call - 使用 TriggerDagRunOperator 多次运行另一个 DAG

logging - 如何在控制台上抑制 Hadoop 日志消息

mongodb - 日志查看实用程序数据库选择

hadoop - 基于部分HBase行创建RDD

linux - 如何停止/杀死以守护进程模式启动的 Airflow 调度程序

hadoop - 在HiveQL中喜欢任何功能