Airflow 触发执行超时时,任务未停止

Airflow 触发执行超时时,任务未停止,airflow,Airflow,我有自己的自定义操作符extensedbaseoperator,如下所示。 如果任务运行超过30分钟,我试图终止该任务。 超时似乎是根据日志触发的,但任务仍在继续 我错过什么了吗?我查看了官方文件,但不知道出了什么问题。 我的接线员如下所示 class MyOperator(BaseOperator): @apply_defaults def __init__( self, some_parameters_here, *args,

我有自己的自定义操作符extensedbaseoperator,如下所示。 如果任务运行超过30分钟,我试图终止该任务。 超时似乎是根据日志触发的,但任务仍在继续

我错过什么了吗?我查看了官方文件,但不知道出了什么问题。

我的接线员如下所示

class MyOperator(BaseOperator):
    @apply_defaults
    def __init__(
      self,
      some_parameters_here,
      *args,
      **kwargs):
      *args,
      **kwargs):
      super(MyOperator, self).__init__(*args, **kwargs)
      # some initialization here

    def execute(self, context):
      # some code here
t = MyOperator(
     task_id='task',
     dag=scheduled_dag,
     execution_timeout=timedelta(minutes=30)
我的任务如下

class MyOperator(BaseOperator):
    @apply_defaults
    def __init__(
      self,
      some_parameters_here,
      *args,
      **kwargs):
      *args,
      **kwargs):
      super(MyOperator, self).__init__(*args, **kwargs)
      # some initialization here

    def execute(self, context):
      # some code here
t = MyOperator(
     task_id='task',
     dag=scheduled_dag,
     execution_timeout=timedelta(minutes=30)
我发现了这个错误,但任务仍在继续

[2018-04-12 03:30:28,353] {base_task_runner.py:98} INFO - Subtask: [Stage 6:==================================================(1380 + -160) / 1224][2018-04- 
12 03:30:28,353] {timeout.py:36} ERROR - Process timed out
参考文献。

此气流作业运行Spark作业。 所以,我需要在超时时调用on_kill方法时停止Spark会话

def on_kill(self):
    if (self.spark):
        logging.error('on_kill: stopping spark session...')
        self.spark.stop()

您应该检查您的任务代码是否包含这样的“例外”

def func(**kwargs):
    try:
        time.sleep(3*60)
        _log.info('sleep 3*60s finished')
    except Exception:
        _log.error('except exception:', exc_info=True)
    return 'success'
它将捕获AirflowTaskTimeout异常,以便进程不会按预期中止

[2019-12-27 10:59:54,064] {logging_mixin.py:95} INFO - [2019-12-27 10:59:54,061] {timeout.py:42} ERROR - Process timed out, PID: 62104
[2019-12-27 10:59:54,065] {test_timeout.py:61} ERROR - except exception:
Traceback (most recent call last):
  File "~/airflow/dags/test_timeout.py", line 58, in func
    time.sleep(3*60)
  File "~/airflow/airflow/utils/timeout.py", line 43, in handle_timeout
    raise AirflowTaskTimeout(self.error_message)
airflow.exceptions.AirflowTaskTimeout: Timeout, PID: 62104
[2019-12-27 10:59:54,070] {python_operator.py:115} INFO - Done. Returned value was: success
使用指定的异常类型可以解决此问题