본문 바로가기
Workflow/airflow

airflow 빠른 설치 및 기본 db를 mysql로 변경하기

by nothing-error 2023. 1. 31.

airflow 설치가 필요해서 공식문서를 참고해서 작성해놓는다. 기본 설치는 편하지만 데이터베이스를 변경하고 db init 하는 과정에서 계속 에러가 발생하여 기록으로 남김.

 

0. 기본 환경

  • wsl2 우분투
  • mysql  Ver 8.0.32-0ubuntu0.22.04.2 for Linux on x86_64 ((Ubuntu))
  • 미니콘다로 python 3.9 버전의 가상환경 세팅(원래 우분투에는 python 3.10)
  • 기존의 홈디렉토리에 있는 airflow 디렉토리 삭제

 

만약, mysql 설치가 안됐다면 참고.  2023.01.31 - [Database/mysql] - 빠른 MySQL 기본 설치방법 및 세팅

 

1. airflow 설치 ( 공식문서 : https://airflow.apache.org/docs/apache-airflow/stable/start.html )

 

 

$ vi airflow.sh

vi 편집기로 airflow.sh 쉘스크립트 만들어서 아래와 같이 작성 

 

# Airflow needs a home. `~/airflow` is the default, but you can put it
# somewhere else if you prefer (optional)
export AIRFLOW_HOME=~/airflow

# Install Airflow using the constraints file
AIRFLOW_VERSION=2.3.4
PYTHON_VERSION="$(python3 --version | cut -d " " -f 2 | cut -d "." -f 1-2)"
# For example: 3.7
CONSTRAINT_URL="https://raw.githubusercontent.com/apache/airflow/constraints-${AIRFLOW_VERSION}/constraints-${PYTHON_VERSION}.txt"
# For example: https://raw.githubusercontent.com/apache/airflow/constraints-2.5.1/constraints-3.7.txt
pip install "apache-airflow==${AIRFLOW_VERSION}" --constraint "${CONSTRAINT_URL}"
pip install PyMySQL #

# The Standalone command will initialise the database, make a user,
# and start all components for you.
# airflow Standalone

# Visit localhost:8080 in the browser and use the admin account details
# shown on the terminal to login.
# Enable the example_bash_operator dag in the home page
$ bash airflow.sh

 

설치 대부분의 에러는 버전문제로 인해 발생하는 것을 느낌. 공식문서 꼭 확인하기

 

airflow 버전은 현재 2.5.1 까지 나와있는데 db 변경시 에러가 발생하여 버전을 2.3.4로 낮춤.

파이썬으로 mysql 다룰 거라서 PyMySQL도 같이 추가해 놓음.

 

standalone 하면 기본 디폴트로 다 해주지만 굳이 필요 없으므로 제거.

 

설치가 완료되면 홈디렉토리에 airflow가 생성됨

 

 

 

 

2. db 변경 (공식문서 : https://airflow.apache.org/docs/apache-airflow/stable/howto/set-up-database.html)

airflow 경로로 이동 후 안에 구성파일을 보면 airflow.cfg 파일이 있음 여기서 airflow 기본 설정들을 변경할 수 있음

$ cd ~/airflow

 

vi편집기로 airflow.cfg 열기

$ vi airflow.cfg

아래로 내리다보면 database가 나옴

 

편집기에서 '/' 누르면 검색가능 / 누르고 아래 내용 검색

sql_alchemy_conn =

 

기본은 sqlite 인데 이게 병렬로 돌아가진 않아서 테스트용이고 상용에서는 다른걸로 변경해줘야함. 보통은 postgresql 와 mysql 많이 사용하는것 같음. mysql8로 이미 설치된게 있으니 mysql 사용하고 커넥터는 pymysql 사용할거라

같이 적어줌.

mysql+pymysql://mysql계정:mysql비밀번호@아이피주소나호스트명:포트/airflow_db

 

다음 mysql 에서 airflow_db 생성해줌.

CREATE DATABASE airflow_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'airflow_user' IDENTIFIED BY 'airflow_pass';
GRANT ALL PRIVILEGES ON airflow_db.* TO 'airflow_user';

 

 

여기까지 다 완료됐으면 설정된 값으로 초기화 해줌(혹시나 airflow example dag 보기 싫으면 위의 cfg 에서 수정가능 ( True -> False)

$ airflow db init

 

변경이 잘 됐는지 확인

$ airflow config get-value database sql_alchemy_conn

잘 변경됐으면 airflow에서 사용할 계정을 생성해야함.

 

$ airflow users create  --username airflow  --firstname airflow   --lastname airflow  --role Admin  --password airflow --email airflow@airflow.com

 

 

마지막으로 웹서버와 스케줄러 띄우면 끝(이후 airflow 관련 모든 세팅이 끝난 다음에는 nohup으로 띄우기)

$ airflow webserver -p 8080
$ airflow scheduler

 

 

모든 순간이 아름다웠다면 아래와 같이 샘플예제가 들어있는 웹ui가 보이며 만약 db 변경을하지 않았다면

노란색줄이 하나 더 있을거임....

 

 

 

 

설치하면서 느낌점

 내가 잘못한게 없으면 버전문제를 바로 떠올리는게 트러블슈팅 해결하는데 가장 빠르다.

댓글