지구정복

[Airflow] Docker를 이용해서 Apache Airflow설치후 워크플로 만들기 본문

데이터 엔지니어링 정복/Airflow

[Airflow] Docker를 이용해서 Apache Airflow설치후 워크플로 만들기

eeaarrtthh 2022. 3. 8. 21:26
728x90
반응형
SMALL

* 참고도서: 빅데이터를 지탱하는 기술

 

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

 

Airflow 2.0 설치하기(1)

Airflow 2.0 설치하기 Airflow 2.0을 docker를 이용 centos에 설치해보도록 하자. 이 글에서는 centos를 이용하여 아무것도 없는 상태에서 설치를 진행하며 airflow 가이드문서에 따른 설치 방법은 아래의 글

dydwnsekd.tistory.com

 

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를 실행해본다.

 

728x90
반응형
LIST
Comments