파이썬이 설치되어 있어야 한다.
여기선 python 3.x 버전으로 진행한다.
# airflow 설치
pip3 install apache-airflow
# mysql 플러그인 설치
관련플러그인 목록은 다음 사이트를 참조했다.
https://haereeroo.tistory.com/6
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]'
끝.
'공부 > 프로그래밍' 카테고리의 다른 글
[aws] CodeDeploy 중 BeforeBlockTraffic 진행이 안될 때 (0) | 2020.07.21 |
---|---|
[aws] Jenkins + S3 + CodeDeploy 를 이용해 배포하기(수동배포) (0) | 2020.07.16 |
[springboot] @Valid 를 이용해 request 시 필수파라미터 체크하기 (0) | 2020.06.23 |
[aws] EC2 에 JAVA 버전 11로 업데이트 하기 (0) | 2020.06.18 |
[springboot, aop] 반복적인 작업은 이제 그만, AOP로 해결하기 (0) | 2020.06.17 |
댓글