본문 바로가기
클라우드 및 인프라/Linux

docker 기반 airflow 설치하기

by 작은소행성 2021. 6. 16.

 

 

도커 컨테이너 생성

docker run -it -d --restart always -p 11080:8080 -e LC_ALL=C.UTF-8 -v /home/bsh/docker-temp/airflow:/home/share --name airflow ubuntu:18.04

컨테이너 접속

docker exec -it airflow bash

 

 

설치 후 실행

Miniconda3-latest-Linux-x86_64.sh

sh Miniconda3-latest-Linux-x86_64.sh

 

 

 

docker restart 후 다시 접속한다

gcc를 설치해야한다.

apt-get update
apt-get install gcc
apt-get install nano

 

 

그 후 conda를 업데이트하고 airflow를 설치해준다.

 

conda update --all -y
conda install -y airflow

 

 

버전 에러가 나기 떄문에 airflow를 업그레이드 해줘야 한다.

pip install --upgrade apache-airflow

 

 

 

 

기본 우분트로 실행하다보니 pip 조차 설치되어 있지 않았다.  우분투 기본 설정을 해준다.

apt-get install software-properties-common
apt-get install python3.8
apt-get install python-pip

 

python3 인지 확인해준다. 

 

 

 

기본 설정을 위해 db를 초기화 해준다

 

airflow db init

airflow db init

 

 

airflow 설치

pip install apache-airflow

 

airflow 폴더 구조

airflow

- airflow.cfg     :  airflow 환경설정 파일

- airflow.db     :  데이터베이스(SQLite) 파일

- dags            :  DAG를 저장하는 디렉토리

    - dag.py      :  DAG 정의 파이썬 파일

- logs             :  로그파일을 저장하는 디렉토리

 

 

airflow.cfg 파일에서 dags와 logs 파일의 위치를 수정할 수 있다.

 

 

Airflow는 기본값으로 sqlite를 사용한다. sqlite에서는 SequentialExecutor만 설정가능하기에 DAG내에서 task의 병렬실행이 불가능하다. 병렬실행을 가능하게 하려면 LocalExecutor나 CeleryExecutor를 사용해야하는데 그러기위해선 Database를 Sqlite가 아닌 다른 Database를 사용해야 한다.

 

 

 

 

 

 

nano /root/airflow/airflow.cfg 에서 설정 수정하기

 

sql_alchemy_conn 에서 localhost 로 적으면 해당 컨테이너를 찾아가지 못해서

host 의 ip 혹은 postgres 컨테이너의 ip를 넣는것이 좋다

sql_alchemy_conn= postgresql + psycopg2 : //db_user_name : db_password @ localhost : 5432 /db_name

 

example을 보고싶지 않다면 airflow.cfg에서 load_examples = False로 설정하면 된다

 

[core]
dags_folder = /home/share/dags
base_log_folder = /home/share/logs
plugins_folder=/home/share/plugins

hostname_callable = socket.getfqdn

default_timezone = Asia/Seoul

executor = LocalExecutor

#sql_alchemy_conn = sqlite:////root/airflow/airflow.db
sql_alchemy_conn = postgresql+psycopg2://postgres:password@192.xx.xx.xx/airflow

sql_engine_encoding = utf-8




[webserver]

default_timezone = Asia/Seoul

 

 

 

 

데이터 베이스가 새로 생성되다 보니 

새로운 데이터베이스 이름으로 다시 연결해주었다. (DBeaver 사용)

 

 

 

airflow initdb명령어를 통해 DB초기화 해주면 이제 sqlite가 아닌 postgres를 사용할 수 있다.

설정 수정이 끝나면 db에 table이 생성된 것을 확인할 수 있다.

airflow db init

 

 

 

ModuleNotFoundError: No module named 'psycopg2'

으로 에러가 난다면

pip install psycopg2-binary

설치 후 다시 db init을 실행한다

 

 

 

airflow webserver를 실행한다

airflow webserver -p 8080 &
nohup airflow scheduler &

 

 

 

 

 

 

 

 

로그인할 계정을 생성할 명령어 입력 후 비밀번호를 치면 계정생성이 된다.

 

# create an admin user
airflow users create \
    --username admin \
    --firstname Peter \
    --lastname Parker \
    --role Admin \
    --email spiderman@superhero.org

 

 

 

 

 

 

 

 

ps -ef 명령어로 실행중인 프로세스를 확인할 수 있다.

ps -ef

 

airflow 버전 확인

airflow version

 

airflow dags list 로 task 확인가능하다.

다른 블로그 보면 airflow list_dags의 명령어로 나와있는데 나는 아래 명령어로 해야 보였다.

airflow dags list

 

 

 

airflow 설치 후 webserver 를 실행하면 다음과 같은 경고를 만난다면 아래 링크를 참고하면된다.

WARNING: No user yet created, use flask fab command to do it.

 

https://bsssss.tistory.com/575

 

 

 

 

 

 

출처: https://dhznsdl.tistory.com/19 

반응형