# Airflow
- [[Production Docker Image for Apache Airflow]]
- [[Basic Airflow architecture]]
- [[Airflow with Docker]]
### 외부 접속을 위해 포트 지정
airflow webserver -p 8080
## Tutorial
- airflow-tutorial: https://github.com/tuanavu/airflow-tutorial
## 설치
pip3 install apache-airflow --use-feature=2020-resolver
### 사용자 생성
$ airflow users create \
--username admin \
--firstname Peter \
--lastname Parker \
--role Admin \
--email spiderman@superhero.org
### 사용자 삭제
$ airflow users delete -u admin
User admin deleted
### DB reset
airflow db reset
### 웹서버 실행
# start the web server, default port is 8080
airflow webserver --port 8080
## Airflow의 구조
### DAG (Directed Acyclic Graph)
여러 개의 테스트가 합쳐져서 동작하는 하나의 [[데이터 워크 플로우]]를 말한다. [[DAG]]은 파이썬 코드를 기반으로 사용자가 정의하고 실행된다. 예를 들면 [[CloudSQL]]에서부터 데이터를 가져와서 [[빅쿼리]]까지 적재하는 모든 개별 구간(태스크)을 합쳐 하나로 만든 데이터 파이프라인이 DAG이 된다.
### Operator and Task
Operator는 DAG안에서 정의되는 작업 함수((함수임을 주의하자))이며, 데이터가 처리되고 이동하는 각각의 개별 태스크를 정의하는 함수이다.
이 Operator가 DAG이 실제로 데이터 워크플로우에 정의되고 실행되면서 호출 된 것이 Task이다. 조금 더 이해를 돕기 위해 부연설명을 덧붙이자면, 객체지향 언어에서의 Operator가 Class라면, Task는 object라고 보면 된다.
## Airflow 설치하기
// 환경 변수 설정
$ export AIRFLOW_HOME=~/airflow
// Airflow 설치
$ pip install airflow
// DB 초기화
$ airflow initdb
// 웹 서버 실행
$ airflow webserver -p 8080
## Airflow 설정 파일 수정하기
Airflow의 설치가 완료되었다면, Airflow의 정상적인 동작을 위해 설정파일($AIRFLOW_HOME/airflow.cfg)을 수정하여야 한다. VI등의 편집기를 이용해서 설정 파일의 내용을 아래와 같이 수정한다.
...
# Are DAGs paused by default at creation // True -> False로 변경
dags_are_paused_at_creation = False
...
# Whether to load the examples that ship with Airflow. It's good to
# get started, but you probably want to set this to False in a production
# environment // True -> False로 변경
load_examples = False
...
## ETL 서버 SSH연결 설정
데이터 워크플로우의 동작을 위해서는 Airflow가 구성된 서버에서 ETL서버로의 SSH 원격 명령 실행이 필요하다. ETL서버에 대한 원격SSH연결 설정을 위해 아래와 같이 Airflow 웹 서버를 실행시킨 상태에서 웹 콘솔의 상단의 Admin -> Connections메뉴로 이동한다.
## Airflow 데이터 워크플로우 만들기
## 출처
- https://whitechoi.tistory.com/50