Apache-Airflow(2) : 스케줄링

이윤택·2022년 9월 21일
0

Apache Airflow

목록 보기
2/2

Airflow의 스케줄링에 대하여 알아본다

정기적으로 실행

  • Airflow DAG에 스케줄 간격을 정의하여 정기적으로 실행
  • DAG를 초기화할 때 schedule_interval 인수를 설정하여 스케줄 간격 정의
  • default는 None. DAG가 예약 실행되지 않고, UI 혹은 API를 통해 수동으로 트리거하면 실행

스케줄 간격 정의하기

  • 현재 진행중인 프로젝트와 같이, 매일 사용자 이벤트를 수집하여 분석하는 경우 DAG를 매일 한 번 실행되도록 예약
with DAG(
	dag_id='dag-for-velog',
    schedule_interval='@daily',
    tags=['airflow'],
    start_date = datetime(2022,1,1)
    ...
    )

위의 예시코드의 경우, 2022-01-01 13:00에 실행하여도 그 다음날이 되기 전까지 DAG는 아무런 작업도 하지 않는다.

  • end_date를 사용하지 않으면 영원히 설정한 주기마다 작업이 실행된다.

Cron 기반의 스케줄 간격 설정

  • 시간 간격을 정의할 때 유용함
- 0 * * * * : 매시간(정시에 실행)
- 0 0 * * * : 매일(자정에 실행)
- 0 0 * * 0 : 매주(일요일 자정에 실행)

- 0 0 1 * * : 매월 1일 자정
- 45 23 * * SAT : 매주 토요일 2345- 0 0 * * MON, WED, FRI : 매주 월,, 금요일 자정에 실행
- 0 0 * * MON-FRI : 매주 월요일~금요일 자정에 실행
- 0 0,12 * * * : 매일 자정 및 오후 12시에 실행

빈도 기반의 스케줄 간격 설정

  • cron식의 제약은 특정 빈도마다 스케줄을 정의할 수 없다는 것
    ex) 3일마다 DAG 실행
  • timedelta 인스턴스를 이용하여 빈도 기반 스케줄 사용
with DAG(
    dag_id="dag-for-velog",
    schedule_interval=datetime.timedelta(days=3),
    start_date=datetime.datetime(year=2022, month=1, day=1),
    end_date=datetime.datetime(year=2022, month=1, day=5),
	)

데이터 증분 처리 (Increment Data handling)

데이터 증분 처리 : 일정 시간마다 새롭게 추가된 데이터만 처리

  • 증분 방식으로 데이터를 처리하면, 스케줄된 하나의 작업에서 처리해야 할 데이터 양을 크게 줄일 수 있기 때문에, 전체 데이터셋을 처리하는 것보다 훨씬 효율적

과거 시점의 작업 실행

  • 기본적으로 Airflow는 아직 실행되지 않은 과거 스케줄 간격을 예약하고 실행한다
  • 과거 시작 날짜를 지정하고 해당 DAG를 활성화하면 현재 시간 이전에 과거 시작 이후의 모든 스케줄 간격이 생성된다
  • catchup을 false로 설정하여 비활성화할 수 있다
profile
데이터 엔지니어로 전향중인 백엔드 개발자입니다

0개의 댓글