我需要做以下事情:
检查服务器是否已启动,如果是,我检查该服务器中的Spark群集是否已启动,如果它已经关闭我尝试启动它,它已经启动了我前进到运行我的Spark工作。
我想创建一个任务来检查Spark集群是否已启动(可能尝试运行一个简单的Spark作业)。如果失败了,我就会启动"启动Spark集群"任务。
我使用的是Airflow,但是在前一个任务失败的情况下没有找到触发任务的方法。除此之外,我需要检查前一个,以防它成功,所以它将分支到Spark工作任务并跳过"启动Spark Cluster"任务。
如果你能提供一些很棒的样品。我尝试使用trigger_rule和分支操作符但到目前为止没有任何结果。也许是因为网上的代码示例太少了。
由于
答案 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)
`