2017-05-31 23 views
6

実行中のステップに応じて気流内のSubDAGを持っています(通常、約2時間です。 1.7.1.3では、このステップは一貫してAIRFLOW-736を引き起こし、すべてのステップが成功したときにSubDAGが「実行中」の状態で停止します。 SubDAGOperatorを手動でデータベース内で(実行するのではなく)マークすることで、SubDAGの後にステップがないので、これを回避することができました。気流 - 1時間後に失敗したとマークされたSubDag内の長時間実行中のタスク

私たちは以下のようにして、今すぐアップグレードをエアフロー1.8.1をテストしている:

  1. 、PIPを経由して私たちのスケジューラと労働者
  2. をダウンShuting気流をアンインストールし、Apache-エアフローをインストール(バージョン1.8.1 )
  3. システムOで気流スケジューラと労働者

を実行

  • UPGRADEDB気流をruningて同じDAGは、長時間実行しているタスクが1時間マークに当たった後のおよそ100%の時間に失敗しています(間違いなく、正確には3600秒後ではありません - それは時間ティック後30〜90秒です)タスクが実行中であるとは言えますが、「Executor report task instance finished(failed)」というメッセージが表示されます。しかし、実際にタスクがあったにもかかわらず、データベースに基づいてタスクが失敗したと誤解したスケジューラ(job2.pyのthis lineを参照)と誤解されているということは、どういうわけか不一致です。

    エアフローデータベースのtask_instanceテーブルで状態が「失敗」していることが確認されていますので、タスクが失敗した場合に何が失敗するかを知りたいと思います。自身がまだ実行されている

    することはここでは問題をトリガサンプルDAGです:

    from datetime import datetime 
    from airflow.models import DAG 
    from airflow.operators.bash_operator import BashOperator 
    from airflow.operators.subdag_operator import SubDagOperator 
    
    DEFAULT_ARGS = {'owner': 'jdoe', 'start_date': datetime(2017, 05, 30)} 
    
    def define_sub(dag, step_name, sleeptime): 
        op = BashOperator(
         task_id=step_name, bash_command='sleep %i' % sleeptime,queue="model", dag=dag 
        ) 
        return dag 
    
    def gen_sub_dag(parent_name, step_name, sleeptime): 
        sub = DAG(dag_id='%s.%s' % (parent_name, step_name), default_args=DEFAULT_ARGS) 
        define_sub(sub, step_name, sleeptime) 
        return sub 
    
    long_runner_parent = DAG(dag_id='long_runner', default_args=DEFAULT_ARGS, schedule_interval=None) 
    
    long_sub_dag = SubDagOperator(
        subdag=gen_sub_dag('long_runner', 'long_runner_sub', 7500), task_id='long_runner_sub', dag=long_runner_parent 
    ) 
    
  • +0

    今日、同じ問題、1つの長い実行中のタスクを持つサブダグを実行しました。少し時間がたってから、エラーメッセージが表示されました。面白いことに、スケジューラは、空気の流れのブロックされたリソース外れによって失敗したタスクを再開しようとしました。元のタスクは引き続き実行され、正しく終了しました。タスクが終了する前に、エアフローによってサブダグが失敗したとマークされました。 –

    +0

    どのエグゼキュータを使用していますか。それはセロリ+レディスですか? –

    答えて

    0

    CeleryとRedisで動作している場合は、visibility timeout setting for Celeryを見て、タスクの終了予定時間を超えて増やしてください。

    私たちはtasks-ack-lateにCeleryを設定しましたが、それでもタスクが消える問題があります。セロリのこのa bugと考えています。

    関連する問題