无法在Airflow中运行任务

时间:2019-05-30 15:13:14

标签: airflow airflow-scheduler

每当我尝试运行DAG时,它都会获得成功状态,但无法运行任务。 首次运行时,效果很好

trigger_controller_dag.py:

public class test {
    public static void main(String args[]) {
        JFrame frame = new JFrame();

        JLabel label = new JLabel("<html><div style='width: 100px; background-color: red;'>test</div>");
        frame.getContentPane().add(label);

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(500, 200);
        frame.setVisible(true);
    }
}

trigger_target_dag.py:

def conditionally_trigger(context, dag_run_obj):
    c_p = context['params']['condition_param']
    if context['params']['condition_param']:
        dag_run_obj.payload = {'message': context['params']['message']}
        pp.pprint(dag_run_obj.payload)
        return dag_run_obj

dag = DAG(
    dag_id='example_trigger_controller_dag',
    default_args={
        "owner": "airflow",
        "start_date": datetime.utcnow(),
    },
    schedule_interval='@once',
)

trigger = TriggerDagRunOperator(
    task_id='test_trigger_dagrun',
    trigger_dag_id="example_trigger_target_dag",
    python_callable=conditionally_trigger,
    params={'condition_param': True, 'message': 'Hello World'},
    dag=dag,
)

在运行DAG时,出现以下错误, 依赖性“任务实例状态”失败:任务处于“成功”状态,该状态不是有效的执行状态。必须清除任务才能运行

2 个答案:

答案 0 :(得分:0)

尝试使用schedule_interval='@once'代替schedule_interval=None

@once表示它将只运行一次。

答案 1 :(得分:0)

两个DAGS中的start_date变量都是动态的,可能会引起问题'start_date': datetime.utcnow()。不建议将它们设置为动态开始,否则会导致错误。

尝试将其设置为静态开始日期,例如'start_date': datetime(2019, 5, 29) #year month day

取自Airflow FAQ

  

我们建议不要将动态值用作开始日期,尤其是   datetime.now(),因为它可能会令人困惑。任务被触发   一旦周期结束,理论上@hourly DAG就永远不会   now()沿现在移动到一个小时后。

与此相关的另一个SO问题:why dynamic start causes issues