본문 바로가기
공부/프로그래밍

[data] airflow 설치(DB: mysql)

by demonic_ 2020. 7. 2.
반응형

 

파이썬이 설치되어 있어야 한다.

여기선 python 3.x 버전으로 진행한다.

 

 

# airflow 설치

pip3 install apache-airflow

 

# mysql 플러그인 설치

 

관련플러그인 목록은 다음 사이트를 참조했다.

https://haereeroo.tistory.com/6

 

airflow 시작해보기 1 - 설치

1. 서론 Apache Airflow는 오픈 소스 워크 플로우 관리 플랫폼입니다. 말그대로 일련의 작업들의 흐름을 관리해주는 플랫폼인데요, cron만으로 하기 어려운 분기를 한다거나 예외처리를 하는 등의 복

haereeroo.tistory.com

 

sudo pip3 install 'apache-airflow[mysql]'

 

만약 다음과 같은 에러가 난다면 맨 하단을 참조

- ModuleNotFoundError: No module named 'MySQLdb'

- OSError: mysql_config not found

 

 

 

# DB(mysql) 설정

1) mysql에 database 및 계정 생성

root 계정으로 접속한 후 다음처럼 database와 계정을 생성한다(이름, 비밀번호는 직접 설정)

create database airflow;
grant all privileges on airflow.* to airflow@localhost identified by '비밀번호';
grant all privileges on airflow.* to airflow@'%' identified by '비밀번호';
flush privileges;

 

 

2) airflow 설정

airflow가 설치되어 있는 곳으로 이동하여 폴더 내 airflow.cfg 파일을 수정한다.

내 경우 설치 운영체제가 mac이라 다음 경로에 설치되었다.

/Users/dgpark/airflow

airflow.cfg 파일 내 다음 설정을 변경한다.

sql_alchemy_conn = mysql://[ID]:[PASSWORD]@[IP]:3306/airflow

만약 샘플데이터를 원하지 않는다면 airflow.cfg 파일 내 다음 옵션도 False로 변경해야한다

load_examples = False

설정 후 DB 설정을 초기화 한다.

airflow initdb

내 경우 바로 되지 않고 아래와같이 에러가 발생했다.

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

명시된대로 mysql 내 explicit_defaults_for_timestamp 설정을 변경해야 한다.

다음 명령어를 입력하면 현재 설정을 확인할 수 있다.

show global variables like '%timestamp%';

 

root 계정으로 접속해서 수정하는 방법과 mysql을 띄울때 설정을 넣는 방법이 있는데 일단 둘다 여기에 써두겠다.

 

 

 

# mysql 설정 변경하기

1) root 계정으로 접속해 변경

SET GLOBAL explicit_defaults_for_timestamp = 1;

그런데 내 경우엔 다음과 같은 에러로 안되었다.

ERROR 1238 (HY000): Variable 'explicit_defaults_for_timestamp' is a read only variable

 

그래서 my.cnf 파일에 직접 설정하고 mysql 서비스를 재시작했다.

 

2) my.cnf 파일 수정하기

 

mysql을 설정하는 my.cnf 파일에 직접 추가한다

내 경우 테스트 서버에 mysql이 설치되어 있어 접속해 수정했다.

 

# mysql이 설치되어 있는 서버에서. 
# 대체로 /etc 아래 있다. 다른곳에 위치할 경우 직접 찾아야한다
vi /etc/my.cnf 

다음내용 추가

explicit_defaults_for_timestamp = 1

설정이 끝났으면 mysql을 다시 실행한다

# centos 7 기준
systemctl restart mysqld

 

 

이제 DB 초기화 한다

airflow initdb

DB: mysql://airflow:***@[IP]:3306/airflow
[2020-07-02 09:14:18,942] {db.py:378} INFO - Creating tables
INFO  [alembic.runtime.migration] Context impl MySQLImpl.
INFO  [alembic.runtime.migration] Will assume non-transactional DDL.
Done.

데이터베이스에 접속하면 테이블이 생성됨을 확인할 수 있다.

 

마지막으로 웹페이지를 띄워보자

airflow webserver -p 8080

포트번호는 상황에 맞게 변경하면 된다.

 

 

 

참고로 DAG를 지우려면 DB에서 다음 2개의 테이블을 삭제하면 된다.

dag_tag와 dag가 서로 외래키로 엮여 있으니 dag_tag부터 지워야 한다.

delete from dag_tag;
delete from dag;

 

# 다음 에러가 발생할때: ModuleNotFoundError: No module named 'MySQLdb'

DB 초기화 할때 다음 에러가 발생하면 mysql 클라이언트 및 airflow mysql 플러그인을 설치해야한다.

 

이런 에러나,

 

...
ModuleNotFoundError: No module named 'MySQLdb'

이런 에러가 발생할 때.

    Complete output from command python setup.py egg_info:
    /bin/sh: mysql_config: command not found
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "/tmp/pip-build-dgyz_55l/mysqlclient/setup.py", line 16, in <module>
        metadata, options = get_config()
      File "/tmp/pip-build-dgyz_55l/mysqlclient/setup_posix.py", line 53, in get_config
        libs = mysql_config("libs_r")
      File "/tmp/pip-build-dgyz_55l/mysqlclient/setup_posix.py", line 28, in mysql_config
        raise EnvironmentError("%s not found" % (mysql_config.path,))
    OSError: mysql_config not found

다음을 수행한다

sudo yum install mysql-devel

설치한 후 airflow mysql 플러그인을 설치로 마무리

pip3 install 'apache-airflow[mysql]'

 


끝.

반응형

댓글