지구정복
[Airflow] Docker를 이용해서 Apache Airflow설치후 워크플로 만들기 본문
* 참고도서: 빅데이터를 지탱하는 기술
0. 사전환경
window10 위에 Oracle VirtualBox(5.2.44)의 CentOS 7에서 진행
내 OS 계정명과 디렉터리는 다음과 같다.
[hadoop01@localhost ~]$ pwd
/home/hadoop01
현재 VM위에 CentOS 7을 사용하고 있지만 이것저것 설치하고 꼬인 것들이 많아서 Docker이미지로 CentOS 컨테이너 만들고 그 안에서 Airflow를 설치해볼 예정이다.
또한 아래 블로거님의 글을 참고해서 진행했습니다.
https://dydwnsekd.tistory.com/32
1. Docker설치하기
먼저 yum업데이트후 yum을 이용해 docker를 설치한다.
$ sudo yum update -y
$ sudo yum install -y docker docker-registry
부팅시 도커가 가동되도록 설정을 해주고 실행시킨다.
$ systemctl enable docker.service
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
$ systemctl start docker.service
$ systemctl status docker.service
● docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
Active: active (running) since 금 2022-01-07 16:10:35 KST; 9s ago
Docs: http://docs.docker.com
Main PID: 12312 (dockerd-current)
Tasks: 17
CGroup: /system.slice/docker.service
├─12312 /usr/bin/dockerd-current --add-runtime docker-runc=/usr/libexec/docker/docker-ru...
└─12317 /usr/bin/docker-containerd-current -l unix:///var/run/docker/libcontainerd/docke...
도커 명령어가 잘 작동되는지 확인한다.
$ docker --version
Docker version 1.13.1, build 7d71120/1.13.1
CentOS 7 이미지 컨테이너를 실행시킨다.
컨테이너 이름은 airflow로 했다.
$ sudo docker run -p 8080:8080 --name airflow -it centos:centos7.9.2009
[sudo] hadoop01의 암호:
Unable to find image 'centos:centos7.9.2009' locally
Trying to pull repository docker.io/library/centos ...
centos7.9.2009: Pulling from docker.io/library/centos
2d473b07cdd5: Pull complete
Digest: sha256:9d4bcbbb213dfd745b58be38b13b996ebb5ac315fe75711bd618426a630e0987
Status: Downloaded newer image for docker.io/centos:centos7.9.2009
[root@4d004255ada0 /]#
2. Airflow 설치하기
해당 컨테이너 안에 들어왔으면 python3를 설치해줘야 한다.
$ yum install -y python3 python3-devel mysql-python vim
$ yum groupinstall -y "Development Tools"
위 패키지들을 설치하면 pip3도 자동으로 설치된다.
airflow는 pip3로 설치가 가능하니 pip3도 최신버전으로 업그레이드 시켜준다.
$ pip3 install -U pip
$ pip3 -V
pip 21.3.1 from /usr/local/lib/python3.6/site-packages/pip (python 3.6)
이제 Airflow 설치 스크립트를 아래와 같이 작성한다.
$ vim airflow_install.sh
AIRFLOW_VERSION=2.0.0
PYTHON_VERSION="$(python3 --version | cut -d " " -f 2 | cut -d "." -f 1-2)"
# For example: 3.6
CONSTRAINT_URL="https://raw.githubusercontent.com/apache/airflow/constraints-${AIRFLOW_VERSION}/constraints-${PYTHON_VERSION}.txt"
# For example: https://raw.githubusercontent.com/apache/airflow/constraints-1.10.14/constraints-3.6.txt
pip install "apache-airflow==${AIRFLOW_VERSION}" --constraint "${CONSTRAINT_URL}"
실행할 수 있도록 파일 권한을 변경한다.
그리고 실행한다.
$ chmod 755 airflow_install.sh
$ ./airflow_install.sh
설치가 완료되면 airflow명령어가 잘 작동되는지 확인한다.
$ airflow version
2.0.0
Airflow는 데이터베이스를 필요로 한다.
기본값은 Sqlite이다.
sqlite DB를 초기화하고 airflow에 설정해본다.
$ airflow db init
~
Initialization done
이제 Airflow 관리자 계정을 만들어준다.
$ airflow users create \
--username admin \
--firstname a \
--lastname bb \
--role Admin \
--email email@gmail.com
비밀번호는 hadoop으로 했다.
이제 Airflow 웹서버를 실행시키고 로컬에서 접속해본다.
$ airflow webserver --port 8080
주소는 localhost:8080 이다.
아까 만들었던 관리자계정으로 로그인할 수 있다.
3. Airflow 사용하기
웹서버를 끈 뒤 간단한 파이썬으로 간단한 워크플로를 정의해보자.
$ cd /usr/local/lib/python3.6/site-packages/airflow/example_dags/
$ vim dag_sample.py
from datetime import datetime, timedelta
from airflow import DAG
from airflow.operators.bash_operator import BashOperator
default_args={
'owner': 'airflow',
'depends_on_past': False,
'retries': 1,
'retry_delay': timedelta(minutes=1)
}
dag = DAG(
'tutorial_bash',
default_args=default_args,
description='My first tutorial bash DAG',
schedule_interval= '* * * * *'
)
t1 = BashOperator(
task_id='say hello',
bash_command='echo "Hello world!"',
dag=dag
)
t2 = BashOperator(
task_id='what_time',
bash_command='date',
dag=dag
)
t1 >> t2
위 파일을 실행해서 DAG로 등록한다.
$ python3 dag_sample.py
dag가 등록되었는지 확인한다.
$ airflow dags list
dag를 실행해본다.