web-dev-qa-db-ja.com

エアフローで--confオプションを使用するにはどうすればよいですか

エアフローDAGを実行しようとしていますが、タスクにいくつかのパラメーターを渡す必要があります。

コマンドラインで--confパラメーターとして渡されたJSON文字列を読み取るにはどうすればよいですかtrigger_dagコマンド、python DAGファイル。

例:airflow trigger_dag 'dag_name' -r 'run_id' --conf '{"key":"value"}'

7
Praveen Singh

二通り。テンプレートフィールドまたはファイル内から:

{{ dag_run.conf['key'] }}

または、コンテキストが利用可能な場合、たとえばpython PythonOperatorの呼び出し可能:

context['dag_run'].conf['key']
13
Daniel Huang

ここで提供されている例では https://github.com/Apache/airflow/blob/master/airflow/example_dags/example_trigger_target_dag.py#L62 エアフローで渡された「conf」を解析しようとしている間REST AP​​I呼び出し、pythonOperatorでprovide_context=Trueを使用します。

また、REST AP​​I呼び出しでjson形式で渡されたキーと値のペアは、bashOperatorおよびsparkOperatorで'\'{{ dag_run.conf["key"] if dag_run else "" }}\''としてアクセスできます。

dag = DAG(
    dag_id="example_dag",
    default_args={"start_date": days_ago(2), "owner": "airflow"},
    schedule_interval=None
)

def run_this_func(**context):
    """
    Print the payload "message" passed to the DagRun conf attribute.
    :param context: The execution context
    :type context: dict
    """
    print("context", context)
    print("Remotely received value of {} for key=message".format(context["dag_run"].conf["key"]))

#PythonOperator usage
run_this = PythonOperator(task_id="run_this", python_callable=run_this_func, dag=dag, provide_context=True)

#BashOperator usage
bash_task = BashOperator(
    task_id="bash_task",
    bash_command='echo "Here is the message: \'{{ dag_run.conf["key"] if dag_run else "" }}\'"',
    dag=dag
)

#SparkSubmitOperator usage
spark_task = SparkSubmitOperator(
        task_id="task_id",
        conn_id=spark_conn_id,
        name="task_name",
        application="example.py",
        application_args=[
            '--key', '\'{{ dag_run.conf["key"] if dag_run else "" }}\''
        ],
        num_executors=10,
        executor_cores=5,
        executor_memory='30G',
        #driver_memory='2G',
        conf={'spark.yarn.maxAppAttempts': 1},
        dag=dag)
0
zingsy