본문 바로가기

Study/Server

Apache Airflow 설치 (+ MySQL)

0. 실행 환경

- Centos 7

- MySQL 5.7

 

1. 필요한 패키지 설치

 

1) MySQL 설치, Database 생성

# MySQL 접속
mysql --user={계정} --password={password} --host={host}

# database 생성
create database airflow;

# 유저에 airflowDB 권한 부여
grant all privileges on airflow.* to '{계정}'@'%';

 

2) 가상환경 생성 및 실행

# 가상환경 생성
python -m venv venv

# 가상환경 실행
source venv/bin/activate

 

3) airflow 설치

# pip upgrade
pip install --upgrade pip

# airflow 설치
pip install apache-airflow

# mysql 사용하기위해 설치
pip install mysqlclient

# DB 초기화 (Home Directory에 airflow 폴더 생성)
airflow db init

 

4) airflow.cfg 수정 (환경 설정 파일)

cd ~/airflow
vi airflow.cfg

# 아래내용 수정
dags_folder = {dag 디렉토리 위치}

default_timezone = Asia/Seoul

executor = LocalExecutor

sql_alchemy_conn =mysql://{계정}:{계정]@{host}:{port}/{database} # 뒤에서 이부분은 수정된다

load_examples = False

load_default_connections = False

default_ui_timezone = Asia/Seoul

catchup_by_default = False

 

5) 설정 파일 반영

airflow db init

 

 

이때 에러가 발생했다. 

  Using cached mysqlclient-2.0.0.tar.gz (87 kB)
  Preparing metadata (setup.py) ... error
  ERROR: Command errored out with exit status 1:
   command: /usr/bin/python3 -c 'import io, os, sys, setuptools, tokenize; sys.argv[0] = '"'"'/var/tmp/pip-install-dq_69ga1/mysqlclient_ffb37203d53c4ad88f8a65ed4070eb21/setup.py'"'"'; __file__='"'"'/var/tmp/pip-install-dq_69ga1/mysqlclient_ffb37203d53c4ad88f8a65ed4070eb21/setup.py'"'"';f = getattr(tokenize, '"'"'open'"'"', open)(__file__) if os.path.exists(__file__) else io.StringIO('"'"'from setuptools import setup; setup()'"'"');code = f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' egg_info --egg-base /var/tmp/pip-pip-egg-info-_sphd1es
       cwd: /var/tmp/pip-install-dq_69ga1/mysqlclient_ffb37203d53c4ad88f8a65ed4070eb21/
  Complete output (12 lines):
  /bin/sh: 1: mysql_config: not found
  /bin/sh: 1: mariadb_config: not found
  /bin/sh: 1: mysql_config: not found
  Traceback (most recent call last):
    File "<string>", line 1, in <module>
    File "/var/tmp/pip-install-dq_69ga1/mysqlclient_ffb37203d53c4ad88f8a65ed4070eb21/setup.py", line 15, in <module>
      metadata, options = get_config()
    File "/var/tmp/pip-install-dq_69ga1/mysqlclient_ffb37203d53c4ad88f8a65ed4070eb21/setup_posix.py", line 65, in get_config
      libs = mysql_config("libs")
    File "/var/tmp/pip-install-dq_69ga1/mysqlclient_ffb37203d53c4ad88f8a65ed4070eb21/setup_posix.py", line 31, in mysql_config
      raise OSError("{} not found".format(_mysql_config_path))
  OSError: mysql_config not found
  ----------------------------------------

 

 

airflow.cfg에서 sql_alchemy_conn을 아래와 같이 바꿔주었다.

mysql+pymysql://

 

 

그리고 init을 다시 시도하자, 새로운 에러가 발생했다.

Exception: Global variable explicit_defaults_for_timestamp needs to be on (1) for mysql

 

기존 timestamp 관련 설정

 

 

MySQL 8 이상 버전에는 default=1(ON)이지만, 현재 사용중인 5 버전에서는 별도로 mysql database에 설정이 필요하다.

SET GLOBAL explicit_defaults_for_timestamp = 1;

 

 

 

init db를 했을 때 아래와 같이 나오면 성공적으로 셋팅이 완료된다.

airflow db init 성공

 

 

 

 

2. Airflow 실행 

1) Airflow 관리자 계정을 생성한다

airflow users create -e {email@email.com} -f airflow -l airflow -r Admin -p airflow -u airflow

add user 성공

 

 

 

2) Scheduler, Web server 데몬 실행

# scheduler 실행
nohup airflow scheduler > logs/scheduler.log &

# 18090 포트로 web server 실행
nohup airflow webserver -p 18090 > logs/webserver.log &

airflow webserver 실행화면

 

 

web server 화면

 

반응형