无法正常完成Airflow DAG

时间:2018-07-23 19:06:00

标签: apache-spark spark-streaming airflow

我有一个spark-streaming作业,由Airflow安排在EMR上运行。我们希望每周正常终止此EMR集群。

但是,当我向正在运行的kill应用程序发出SIGTERMspark-streaming信号时,它在Airflow DAG中报告为“失败”任务。这阻止了DAG进一步移动,阻止了下一次运行的触发。

有什么方法可以杀死正在运行的spark-streaming应用程序以标记成功,或者即使DAG认为任务已失败也可以让其完成?

1 个答案:

答案 0 :(得分:2)

  

有什么方法可以杀死正在运行的火花流应用程序来标记成功,或者即使DAG认为任务已失败也可以让DAG完成?

对于第一部分,您是否可以共享杀死Spark应用程序的代码?我认为您应该能够使此任务返回成功,并使下游的所有内容“正常工作”。

我对EMR不太熟悉,但是看一下文档,看起来“作业流”就是Spark集群的名称。在这种情况下,您是否使用内置的EmrTerminateJobFlowOperator

我想知道失败的任务是否是集群终止传播回错误代码或其他内容?另外,集群是否可能无法终止并且您的代码引发了导致任务失败的异常?

要回答第二部分,如果您有多个上游任务,则可以在操作员上使用备用触发规则来确定哪些下游任务在运行。

class TriggerRule(object):
    ALL_SUCCESS = 'all_success'
    ALL_FAILED = 'all_failed'
    ALL_DONE = 'all_done'
    ONE_SUCCESS = 'one_success'
    ONE_FAILED = 'one_failed'
    DUMMY = 'dummy'

https://github.com/apache/incubator-airflow/blob/master/airflow/utils/trigger_rule.py

https://github.com/apache/incubator-airflow/blob/master/docs/concepts.rst#trigger-rules