2016-09-21 4 views
5

최근 airflow trigger_dag <my-dag>을 실행할 때 execution_date에 하나의 문제가있는 공기통을 너무 많이 테스트했습니다.기류 trigger_dag execution_date가 다음 날인 이유는 무엇입니까?

내가 execution_date 우리가 here에서 처음에 생각이 아니라고 배웠습니다 : 공기 흐름이 ETL 요구에 맞는 솔루션으로 개발되었다

. ETL 세계에서 은 일반적으로 데이터를 요약합니다. 따라서 2016-02-19에 대한 데이터를 요약하려면 2016-02-20 자정 GMT (GMT)에서 수행합니다 .2016-02-19에 대한 모든 데이터를 바로 작성한 후 바로 이됩니다. 코드 위

start_date = datetime.combine(datetime.today(), 
           datetime.min.time()) 

args = { 
    "owner": "xigua", 
    "start_date": start_date 
} 
dag = DAG(dag_id="hadoopprojects", default_args=args, 
      schedule_interval=timedelta(days=1)) 


wait_5m = ops.TimeDeltaSensor(task_id="wait_5m", 
           dag=dag, 
           delta=timedelta(minutes=5)) 

는 첫 번째 작업은 실제 작업 전에 다른 5 분 기다리는 TimeDeltaSensor이 내 일상 워크 플로우의 시작 부분입니다, 그래서 이것은 내 DAG가 2016-09-09T00:05:00, 2016-09-10T00:05:00에서 트리거된다는 것을 의미합니다 ...

웹 UI에서는 scheduled__2016-09-20T00:00:00과 같은 것을 볼 수 있으며 작업은 에서 실행됩니다. 이는 ETL 모델에 따라 합리적인 것처럼 보입니다.

언젠가 내 dag는 알 수없는 이유로 트리거되지 않으므로 수동으로 트리거합니다. 2016-09-20T00:10:00에서 트리거하면 TimeDeltaSensor는 실행하기 전에 2016-09-21T00:15:00까지 기다립니다.

이것은 내가 원하는 것이 아니며, 다음 날에 2016-09-20T00:15:00으로 실행하고 싶습니다. execution_date에서 --conf '{"execution_date": "2016-09-20"}'까지 전달하려고했으나 작동하지 않습니다.

이 문제는 어떻게 해결해야합니까? 먼저

$ airflow version 
[2016-09-21 17:26:33,654] {__init__.py:36} INFO - Using executor LocalExecutor 
    ____________  _____________ 
____ |__()_________ __/__ /________  __ 
____ /| |_ /__ ___/_ /_ __ /_ __ \_ | /|// 
___ ___ |/_/ _ __/ _// /_/ /_ |/ |//
_/_/ |_/_/ /_/ /_/ /_/ \____/____/|__/ 
    v1.7.1.3 

답변

10

, 나는 동적 사람 행동 때문에 당신이 예상치 못한 당신의 공기 흐름 파이프 라인이 스케줄러에 의해 평가에 기반, start_date에 대한 상수를 사용하는 것이 좋습니다. 이 트리거 될 때 http://pythonhosted.org/airflow/faq.html#what-s-the-deal-with-start-date

지금, 약 execution_date하고,이 공기 흐름에 보딩 사람들을위한 일반적인 잡았다입니다 : 내가 쓴 및 정렬이 모든 것을 밖으로 자주 묻는 질문 항목에 대한 start_date 여기

더 많은 정보를 제공합니다. 기류는 화재가 발생한시기 (마침표의 오른쪽 경계)를 기준으로하지 않고 일정 기간의 왼쪽 경계를 기준으로 execution_date으로 설정합니다. 예를 들어 schedule='@hourly' 작업을 실행하면 매 시간마다 작업이 실행됩니다. 오후 2시에 발생하는 작업은 오후 2시에 오후 1시에서 오후 2 시까 지 처리하는 것으로 가정하기 때문에 오후 2시에 발생하는 작업은 execution_date (오후 1시)입니다. 마찬가지로 매일 작업을 실행하는 경우 execution_date2016-01-01 일 때 자정 직후에 2016-01-02이 실행됩니다.

이 왼쪽 경계 표시는 ETL 및 차등로드 관점에서 생각할 때 많은 의미가 있지만 단순한 cron과 유사한 스케줄러로 생각할 때 혼란스러워집니다.

+0

나는 그것이'start_date' 문제를 생각하지 않습니다를 읽을 수있다, 나는 하루의 자정에 내'start_date' 둥근 비하, 내 문제가 있다는 것입니다'execute_date '는 다음 날로 예정되어 있습니다. 외부에서 dag가 발생하면 위와 같이 비합리적이라고 생각합니다. –

+0

나는 스케줄링 할 ETL 스타일을 이해하고 있지만 어떻게하면 내 문제를 해결할 수 있을까요? 알 수없는 이유로 트리거가 트리거되지 않고 trigger_dag 하위 명령 이외에도'execution_date'를 트리거 할 수있는 방법은'backfill '이 경우, 왜 우리는'trigger_dag'가 필요한가? –

+0

스케줄러를 실행하고 있습니까? 'airflow scheduler' – mistercrunch

1

공기 흐름은 UTC로 시간을 제공합니다. 나는 당신이 작업을 실행하고있는 시간대를 잘 모르겠습니다. 따라서 UTC 시간대를 생각하고 그에 따라 작업을 예약하거나 실행하십시오.

트리거 할 시간을 UTC 시간으로 변환하고 DAG를 실행하십시오. 그것은 작동합니다. 자세한 정보는 아래의 링크를

https://cwiki.apache.org/confluence/display/AIRFLOW/Common+Pitfalls

관련 문제