Apache airflow는 워크플로우 관리 시스템으로 데이터 처리, ETL 작업, 모델 학습 등을 포함한 데이터 파이프라인의 자동화를 가능하게 합니다. 파이썬으로 작성되어 있으며, 파이썬 코드를 통해 사용자 정의 작업을 작성할 수 있습니다.
Airflow의 핵심 개념 중 하나는 "DAG" 입니다. Directed Acyclic Graph ( DAG ) 는 작업의 순서를 정의하고 각 단계의 종속성을 나타냅니다. DAG를 사용하여 Airflow는 작업 스케줄링, 성공 또는 실패시 알림 및 재시도 등의 작업을 수행합니다.
설치 방법에 대해 알아보도록 하겠습니다.
우선 Apache Airflow를 설치하기 위해서는 Python이 설치되어 있어야 합니다.
1. Python 설치
- Python 3.6 이상의 버전이 필요합니다.
2. 필요한 라이브러리 설치
- cryptography
- psycopg2-binary
- mysql-connector-python
- apache-airflow[postgres,mysql,celery]
위 라이브러리들은 pip 명령어를 통해 쉽게 설치할 수 있습니다.
pip install cryptography psycopg2-binary mysql-connector-python apache-airflow[postgres,mysql,celery]
pip install 명령어를 실행하는 도중 위와 같이 오류가 생겼습니다. 이 오류는 mysqlclient 라이브러리를 설치할 때 발생하는 에러로 에러 메시지에서 보이듯이 mysql_config나 mariadb_config 명령어를 찾을 수 없다는 내용이 나옵니다.
Ubuntu 또는 Debian과 같은 apt 패키지 매니저를 사용하는 경우 다음과 같이 명령어를 입력하여 mysql_config를 설치할 수 있습니다.
sudo apt-get install libmysqlclient-dev
RedHat 또는 CentOS와 같은 yum 패키지 매니저를 사용하는 경우 다음과 같이 명령어를 입력하여 mysql_config를 설치할 수 있습니다.
sudo yum install mysql-devel
다른 패키지 매니저를 사용하는 경우 패키지 매니저에서 MySQL 또는 MariaDB의 개발용 라이브러리를 설치하면 됩니다.
pip로 설치를 하는 도중 위 오류가 또 생겼습니다. 이 오류는 pip가 현재 시스템에 설치된 패키지를 고려하지 않고 종속성을 해결하려고 할 때 발생하는 문제입니다. 즉, 시스템에 설치된 패키지와 pip로 설치하려는 패키지 간에 충돌이 발생하는 경우에 이러한 종속성 충돌 오류가 발생할 수 있습니다.
이 문제를 해결하기 위해서는 spyder 패키지의 버전을 업그레이드하거나, pyqt5와 pyqtwebengine 패키지의 버전을 업그레이드해야 할 수 있습니다.
pip install --upgrade pyqt5 pyqtwebengine
위의 명령어를 실행하여 pyqt5와 pyqtwebengine를 최신 버전으로 업그레이드해 보세요.
pip install --upgrade spyder
또는, 위 명령어를 통해 spyder 패키지를 최신으로 업그레이드 합니다.
3. Airflow 설치
Apache Airflow는 Python 패키지로 제공됩니다. 따라서, pip를 사용하여 쉽게 설치할 수 있습니다.
아래의 명령어를 실행하면, 현재 디렉토리에서 apache-airflow-2.5.3.tar.gz 파일을 다운로드하고 설치할 수 있습니다.
pip install apache-airflow-2.5.3.tar.gz
저는 서버에 설치한 anaconda의 pip를 기준으로 airflow를 설치했기 때문에, anaconda/bin/airflow 에 airflow 바이너리 파일이 생성되었습니다.
4. Airflow 초기화
Airflow를 사용하기 전 초기화 과정을 거쳐야 합니다. 이 과정에서 데이터베이스를 설정하고 초기 사용자를 만듭니다.
airflow db init
airflow users create --username admin --firstname FIRST_NAME --lastname LAST_NAME --email admin@example.com --password PASSWORD --role Admin
--username -> airflow에서 사용할 계정 명
--firstname -> 사용자의 이름
--lastname -> 사용자의 성
--email -> 사용자의 이메일 주소
--password -> airfliow에서 사용할 계정 비밀번호
--role -> 생성할 사용자의 역할을 설정합니다. ( Admin, User, Op )
Admin 은 모든 기능에 대한 액세스 권한을 가집니다.
User 는 특정 기능에 대한 액세스 권한을 가집니다.
Op 는 실행 및 모니터링과 같은 기능을 제한적으로 사용할 수 있는 액세스 권한을 가집니다.
user admin에 role이 admin 인 계정을 생성하였습니다. 성공적으로 생성되면 위 사진과 같이 결과가 출력되게 됩니다.
5. webserver 실행
airflow webserver
명령어를 실행했을 때, 위 사진과 같이 출력되면 정상적으로 airflow가 실행 된 것입니다.
airflow를 백그라운드에서 실행하려면 nohup 명령어를 사용하면 됩니다.
nohup airflow webserver > (로그경로)/airflow.log 2>&1 & ( stdout을 airflow.log에 출력 )
nohup airflow webserver > /dev/null 2>&1 & ( stdout을 무시하고 실행 )
stdout 출력을 기준으로 위 두 명령어 중 하나를 선택하여 실행하면 airflow가 백그라운드에서 실행될 것입니다.
실행 후 Airflow 웹 페이지에 접속하면 위 사진처럼 Airflow 메인페이지가 나오게 됩니다.