2017-05-18 5 views
1

아래 스키마에 설명 된대로 기류에서 조건부 작업을 만들고 싶습니다. 예상되는 시나리오는 다음기류 : 회피 작업 방지 =

  • 작업 1 : 모든 작업이 성공하면 작업 1이 작업이 성공하면 다음 작업이는
  • 을 실행, 성공, 다음 작업 3
  • 을 실행하면 Start_cluster는
  • 을 실행하거나 하나의 작업은 다음 작업 4를 실행 실패 : terminate_cluster 내가 시도

enter image description here

: 에

trigger_rule=TriggerRule.ONE_FAILED 

작업 4 숙박도

trigger_rule=TriggerRule.ALL_DONE 

all_done으로 상태를 생략 나는이 솔루션을 foud : How to create a conditional task in Airflow를하지만 나를 위해 작동하지 않습니다.

답변

1

이전 작업이 성공했는지 여부에 관계없이 클러스터를 종료하고 싶으므로 ALL_DONE 소리가 적절합니다. Start_Cluster는 별개입니다. 실패 할 경우 종료 할 클러스터가 없을 수도 있습니다. 단, 경우에 따라 확인/시도해야 할 수도 있습니다.

기본 trigger_rule은 ALL_SUCCESS입니다. 예를 들어 작업 1이 실패하면 작업 2는 작업 1을 실행해야하므로 전체 Dag가 실패합니다.

작업이 실패 할 수도 있지만 여전히 클러스터를 종료하려는 경우 dag를 따라갈 수있는 대체 경로가 필요합니다. PythonBranchOperator을 사용하고 파이썬 콜백 함수를 사용합니다.

또 다른 가능성은 trigger_rule이 "ONE_FAILURE"인 더미 연산자를 사용하고 클러스터 종료 작업을 실행하는 것입니다.

당신이 더미 작업 "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