气流将参数传递给从属任务

时间:2016-07-25 17:37:45

标签: bash airflow

在Airflow中将参数传递给相关任务的方法是什么?我有很多bashes文件,我正在尝试将此方法迁移到气流,但我不知道如何在任务之间传递一些属性。

这是一个真实的例子:

auto sec = std::chrono::duration_cast<std::chrono::seconds>(tp);
auto nsec = std::chrono::duration_cast<std::chrono::nanoseconds>(tp);
auto diff = std::chrono::duration_cast<std::chrono::nanoseconds>(nsec - sec).count();

在t2中,我需要访问在t1中创建的目录名称。

解决方案

#sqoop bash template
sqoop_template = """
        sqoop job --exec {{params.job}} -- --target-dir {{params.dir}} --outdir /src/
    """

s3_template = """
        s3-dist-cp --src= {{params.dir}} "--dest={{params.s3}}
    """



#Task of extraction in EMR
t1 = BashOperator(
        task_id='extract_account', 
        bash_command=sqoop_template, 
        params={'job': 'job', 'dir': 'hdfs:///account/' + time.now().strftime("%Y-%m-%d-%H-%M-%S")},
        dag=dag)
#Task to upload in s3 backup.
t2 = BashOperator(
        task_id='s3_upload',
        bash_command=s3_template,
        params={}, #here i need the dir name created in t1
        depends_on_past=True
    )

t2.set_upstream(t1)

这不是最终解决方案,因此欢迎改进。感谢。

2 个答案:

答案 0 :(得分:18)

查看XComs - http://airflow.incubator.apache.org/concepts.html#xcoms。这些用于在任务之间传递状态。

答案 1 :(得分:0)

我认为Airflow并非用于管理状态。您应该使用数据库执行任务来交换状态。