我有一个spark-streaming
作业,由Airflow安排在EMR上运行。我们希望每周正常终止此EMR集群。
但是,当我向正在运行的kill
应用程序发出SIGTERM
或spark-streaming
信号时,它在Airflow DAG中报告为“失败”任务。这阻止了DAG进一步移动,阻止了下一次运行的触发。
有什么方法可以杀死正在运行的spark-streaming
应用程序以标记成功,或者即使DAG认为任务已失败也可以让其完成?
答案 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