如果先前的任务在Apache Airflow中失败,如何运行任务

时间:2017-02-06 01:55:34

标签: python triggers controls airflow

我需要做以下事情:

检查服务器是否已启动,如果是,我检查该服务器中的Spark群集是否已启动,如果它已经关闭我尝试启动它,它已经启动了我前进到运行我的Spark工作。

我想创建一个任务来检查Spark集群是否已启动(可能尝试运行一个简单的Spark作业)。如果失败了,我就会启动"启动Spark集群"任务。

我使用的是Airflow,但是在前一个任务失败的情况下没有找到触发任务的方法。除此之外,我需要检查前一个,以防它成功,所以它将分支到Spark工作任务并跳过"启动Spark Cluster"任务。

如果你能提供一些很棒的样品。我尝试使用trigger_rule和分支操作符但到目前为止没有任何结果。也许是因为网上的代码示例太少了。

由于

1 个答案:

答案 0 :(得分:0)

您可以使用PythonBranhOperator。 这是一个代码示例供您参考。

VALID_TEST_OUTPUT = 'valid-output'
INVALID_TEST_OUTPUT = 'invalid-test-output'


test_job=PythonOperator(
    ## your task
)

def select_branch_after_test(**kwargs):
    '''
    :return: returns the task_id to proceed with.
    '''
    if com.getoutput('hadoop fs -ls /user/praveen/.test_out/ | grep file1'):
        follow_previous_job = VALID_TEST_OUTPUT
    else:
        follow_previous_job = INVALID_TEST_OUTPUT
    return follow_previous_job


# branching based on successful test output
branching = BranchPythonOperator(task_id=BRANCH_TEST_OUTPUT,
                                 python_callable=select_branch_after_test,
                                 dag=dag)
branching.set_upstream(test_job)

valid_test_output = PythonOperator(
    task_id=VALID_TEST_OUTPUT,
    python_callable=lambda **kwargs: logging.info("test genereated valid output, proceeding with other steps"),
    provide_context=True,
    dag=dag)
valid_test_output.set_upstream(branching)

end_task = PythonOperator(
    task_id=END,
    python_callable=pipeline_run_time,
    provide_context=True,
    trigger_rule='one_success',  ## Important
    dag=dag)

invalid_test_output = PythonOperator(
    task_id=INVALID_TEST_OUTPUT,
    python_callable=lambda **kwargs: logging.info("test did not create valid output, completeing branching dag to other path"),
    provide_context=True,
    dag=dag)
invalid_test_output.set_upstream(branching)

valid_test_output.set_downstream(end_task)
invalid_test_output.set_downstream(end_task)

`

相关问题