Airflow는 작업 스케줄링, 모니터링 및 워크플로우 관리를 위한 오픈 소스 플랫폼이다.
나중에 mysql을 사용하기 위해서 설치하는 라이브러리가 관리자 계정이 아니면 Permission error가 생기기 때문에 관리자 계정으로 접속해서 설치하는 것이 건강에 이롭다.
su
윈도우라면 아나콘다 사이트에 들어가서 설치.(https://docs.anaconda.com/anaconda/install/windows/)
리눅스라면 wget으로 설치할 수 있다.(https://docs.anaconda.com/anaconda/install/linux/)
wget https://repo.anaconda.com/archive/Anaconda3-2021.11-Linux-x86_64.sh
bash Anaconda3-2021.11-Linux-x86_64.sh
source ~/.bashrc
여기서 파이썬 버전은 3.9 이하로 하는 것이 좋다.
conda create --name <가상환경명> python=3.8
conda activate <가상환경명>
시작하기 전 필수로 패키지들을 업데이트 해주고 pip로 airflow 및 필수 라이브러리들을 설치해주자.
apt-get update
pip install apache-airflow
pip install cryptography psycopg2-binary boto3 botocore
여기서는 airflow 백엔드 DB로 MySQL을 설치하도록 하자.
MySQL은 안정성과 신뢰성이 높은 데이터베이스 관리 시스템으로, 데이터베이스의 크기가 커지거나 다중 사용자 환경에서의 작업을 보다 잘 처리할 수 있다. 따라서 Airflow와 같이 대규모의 작업을 처리하는 시스템에서 MySQL을 사용하는 것은 좋은 선택 중 하나다.
또한, MySQL은 오픈 소스 데이터베이스 관리 시스템으로 무료로 사용할 수 있으므로 비용 측면에서도 매우 경제적이다. 따라서 Airflow를 사용하는 경우 MySQL을 선택하는 것이 매우 일반적이다.
윈도우는 MySQL 사이트에 들어가서 설치.(https://dev.mysql.com/downloads/installer/)
리눅스는 아래 패키지를 설치하고 실행하면 된다.
apt-get install mysql-server mysql-client
systemctl status mysql
systemctl start mysql
MySQL에 접근하기 위한 airflow용 계정을 생성해야 한다. 이는 airflow가 데이터베이스에 작성, 업데이트 및 삭제할 수 있는 적절한 권한을 부여해야 때문이고 이를 통해 airflow에서 MySQL 데이터베이스에 액세스하는 보안 수준이 유지된다.
또한, Airflow를 사용하면 여러 사용자가 동시에 작업을 처리할 수 있으므로, 계정을 생성하고 권한을 관리함으로써 각 사용자의 작업을 분리하고 추적할 수 있습니다. 이를 통해 데이터베이스의 보안과 권한 관리를 향상시킬 수 있다.
mysql -u root -p
set global validate_password.policy=LOW; # 패스워드 보안레벨 조정
create user '<계정명>'@'<접속허용 ip>' identified by '<pw>';
# 이때 비밀번호에 @는 절대 들어가지 않도록 하자!!!!!
grant all privileges on *.* to '<계정명>'@'<접속허용 ip>' with grant option;
GRANT REFERENCES ON airflow.dataset TO '<계정명>'@'<접속허용 ip>';
flush privileges;
여기서 패스워드 보안레벨 조정을 하는 이유는 기본으로 보안레벨이 HIGH라 패스워드를 설정하기가 너무 까다롭기 때문이다. 필자는 간단하게 주기위해서 LOW로 낮췄지만 보안을 생각한다면 그냥 두는것이 맞다.
그리고 접속허용 ip는 MySQL DB와 airflow 서버를 따로 두는게 아니라면 localhost로 설정하면 된다.
airflow 관리파일이 들어갈 설치경로를 설정해주자.
mkdir <airflow 설치하고 싶은 경로>
cd <airflow 설치하고 싶은 경로>
mkdir dags
export AIRFLOW_HOME=<airflow 설치하고 싶은 경로>
여기서 dags 폴더는 스케쥴에 들어갈 파이썬 스크립트가 있는 폴더이다.
DAG는 작업 단계를 구성하고 각 단계가 서로 어떻게 연결되는지를 정의한다. DAG는 작업 간의 종속성, 작업이 실행되는 시간, 작업을 실행하는데 필요한 리소스 등과 같은 작업과 관련된 메타데이터를 포함한다. DAG는 파이썬 스크립트로 작성되며, airflow에서 스케줄러가 DAG를 인식하고 작업을 예약하도록 한다.
airflow에서 DAG는 작업 흐름의 최소 단위이며, 작업 단계 간의 종속성을 정의하기 위해 DAG에 대한 특정 구문과 데코레이터를 사용한다. DAG는 일련의 작업을 관리하고, 작업 간의 종속성을 정의하며, 각 작업이 실행되는 일정을 관리한다.
airflow를 처음 설치할 시 아래 명령어로 데이터베이스를 초기화 한다. 그 후 airflow 설정파일을 작성하고 MySQL관련 패키지 및 라이브러리를 설치한 후 다시 데이터 베이스를 초기화 해준다.
airflow db init
vi <airflow 설치하고 싶은 경로>/airflow.cfg
## 아래내용 작성
sql_alchemy_conn = mysql://<계정명>:<pw>@<mysql ip>:3306/<데이터베이스 명>
apt-get install libmysqlclient-dev
pip install mysqlclient
airflow db init
여기서 당신이 만약에 루트계정이 아닌 다른 계정에서 airflow를 설치하고 싶다면 방법이 있다. mysqlclient
설치시에 퍼미션 에러가 발생할 것인데 이는 /usr/bin/gcc
폴더에 권한을 주면 해결된다. 하지만 보안에 문제가 될 수 있다고 하여 권장하지는 않는다.
sudo chmod -R 777 /usr/bin/gcc
airflow db init
명령어는 Airflow의 메타데이터 데이터베이스를 초기화한다. Airflow는 작업 실행 정보, DAG 정의, 작업 상태 등의 다양한 메타데이터를 데이터베이스에 저장하고 관리한다. 이 명령어는 Airflow에서 사용하는 데이터베이스를 초기화하고 테이블을 생성하여 메타데이터를 저장할 수 있도록 한다.
airflow db init
명령어를 실행하면 Airflow는 설정 파일(airflow.cfg)에서 지정된 데이터베이스 정보를 읽어와 해당 데이터베이스에 필요한 테이블을 생성한다. 이 명령어를 실행하기 전에는 데이터베이스에 필요한 테이블이 없으므로 작업을 실행할 수 없다.
따라서, Airflow를 처음 설치하거나 데이터베이스를 변경하거나 업그레이드할 때 airflow db init
명령어를 실행해야 한다. 이 명령어는 데이터베이스를 초기화하는 과정에서 데이터베이스에 저장된 모든 정보가 삭제되므로, 이전 데이터베이스 정보가 필요한 경우에는 미리 백업을 해두어야 합니다.
airflow를 실행하고 접속할 최초 관리자 계정을 생성합니다.
airflow users create \
--username <admin_username> \
--firstname <admin_firstname> \
--lastname <admin_lastname> \
--email <admin_email> \
--role Admin
마지막으로 scheduler와 웹 서버를 실행시키는 것으로 localhost:<포트번호>
에 접속하면 정상적으로 airflow 서버에 접속될 것이다.
airflow scheduler -D
airflow webserver -p <포트번호> -D