以前のタスクが成功したかどうかにかかわらず、クラスタを終了したいと思うので、ALL_DONE
が適切に聞こえます。 Start_Clusterは別として。それが失敗すると、終了するクラスタがないかもしれませんが、場合によってはチェック/試してみる必要があります。
デフォルトのtrigger_ruleはALL_SUCCESS
です。たとえば、タスク1が失敗した場合、タスク2はタスク1が正常に実行されるため、Dag全体が失敗します。
タスクが失敗する可能性がありますが、それでもクラスタを終了したい場合は、ダグを追跡するための代替パスが必要になります。 PythonBranchOperator
を使用し、Pythonコールバック関数を使用します。
もう1つの方法は、trigger_ruleが「ONE_FAILURE」で実行されているダミー演算子を使用してから、「Terminate Cluster」タスクを実行することです。
あなたはダミータスク「Task_Failureを」という名前の場合たとえば、これは、依存関係のチェーンのようになります。そのシナリオで
Start_Cluster >> Task_2 >> Task_3 >> Terminate_Cluster
Task_2 >> Task_Failure
Task_3 >> Task_Failure
Task_Failure >> Terminate_Cluster
、Task_Failureだろう、おそらくそれはいくつかの可能ですので、ONE_SUCCESS
にTerminate_Clusterのtrigger_ruleを設定する必要がありますタスクは決して実行されません。最後のタスクをALL_DONE
に設定し、以前のタスクのいくつかにステータスがない場合は、ハングアップするか失敗する可能性があります。
ALL_DONEとALL_SUCCESSの違い:https://stackoverflow.com/a/47716981/1335793