30 1 * * *
=> 한국은 30 10 * * *
=> 한국 오전 10시 30분Airflow 실행
터미널 1개에 webserver를 띄우고, command+t로 새로운 터미널을 띄워서 scheduler를 띄우기
airflow webserver
airflow scheduler
Airflow 실행해보기
혹시 ValueError: unknown locale: UTF-8 에러가 날경우 ~/.zshrc
또는 ~/.bash_profile
에 아래 설정 추가
export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8
그 후 터미널에서 아래 커맨드 실행하고 webserver 다시 실행
source ~/.zshrc
# 또는 source ~/.bash_profile
1) Default Argument 정의
외에도 다양한 옵션이 있는데, 문서 참고
default_args = {
'owner': 'your_name',
'depends_on_past': False,
'start_date': datetime(2018, 12, 1),
'email': ['your@mail.com'],
'email_on_failure': False,
'email_on_retry': False,
'retries': 1,
'retry_delay': timedelta(minutes=5),
'priority_weight': 10,
'end_date': datetime(2018, 12, 3),
# end_date가 없으면 계속 진행함
}
2) DAG 객체 생성
schedule_interval은 crontab 표현 사용
5 4 * * *
같은 표현을 사용dag = DAG('bash_dag', default_args=default_args, schedule_interval='@once'))
3) Operator로 Task 정의
mysql_to_hive 등도 있음
task1 = BashOperator(
task_id='print_date',
bash_command='date',
dag=dag)
task2 = BashOperator(
task_id='sleep',
bash_command='sleep 5',
retries=2,
dag=dag)
task3 = BashOperator(
task_id='pwd',
bash_command='pwd',
dag=dag)
4) task 의존 설정
>>
나 <<
사용 가능task1 >> [task2, task3]는 task1 후에 task2, task3 병렬 실행을 의미
task1 >> task2
task1 >> task3
~/airflow/airflow.cfg
에서 dagbag_import_timeout, dag_file_processor_timeout 값을 수정하면 됨0 10 * * *
입력~/airflow/dags
에 저장하면 됨Airflow의 기본 context 변수 사용하기
예를 들면
provide_context=True로 지정하면 kwargs 다양한 값들이 저장됨
{'dag': <DAG: python_dag_with_jinja>,
'ds': '2020-02-10',
'next_ds': '2020-02-11',
'next_ds_nodash': '20200211',
'prev_ds': '2020-02-09',
'prev_ds_nodash': '20200209',
'ds_nodash': '20200210',
'ts': '2020-02-10T00:30:00+00:00',
'ts_nodash': '20200210T003000',
'ts_nodash_with_tz': '20200210T003000+0000',
'yesterday_ds': '2020-02-09',
'yesterday_ds_nodash': '20200209',
'tomorrow_ds': '2020-02-11',
'tomorrow_ds_nodash': '20200211',
'end_date': '2020-02-10',
'execution_date': <Pendulum [2020-02-10T00:30:00+00:00]> ...}
"{{ ds }}"
이런 형태로 사용함 : execution_dateairflow backfill -s 2020-01-05 -e 2020-01-10 python_dag_with_jinja
Webserver에서 이런 오류가 발생한다면
No module named 'googleapiclient'
pip3 install --upgrade google-api-python-client
No module named 'airflow.gcp'
pip3 install 'apache-airflow[gcp]'==1.10.3
아마 웹서버쪽에서 werkzeug 다시 설치해야할 수 있음
pip3 install werkzeug==0.15.1
Already running on PID XXXX Error가 발생할 경우
Webserver가 제대로 종료되지 않은 상황
kill -9 $(lsof -t -i:8080)