[Airflow] Airflow 설치 + mysql로 DB지정하기 +서비스(데몬으로) 등록하기
1. Apache Airflow 설치
1) AIRFLOW 설치 및 부가적으로 필요한 패키지 설치
sudo apt-get update
sudo apt install python3-pip
2) 부가적으로 필요한 패키지 설치
pip3 install cryptography psycopg2-binary boto3 botocore
sudo apt install libmysqlclient-dev -y
pip3 install mysqlclient
3) airflow 설치
pip3 install apache-airflow
설치하고 나면 /home/호스트/.local/bin 디렉토리에 관련된 파일들이 저장됨
cd ~
nano .profile
export AIRFLOW_HOME=/home/호스트/airflow
2. sqlite DB를 통해 설치가 잘 됐는지 확인
1) sqlite DB 초기화
/home/호스트/.local/bin/airflow db init
db를 초기화 시키면 /home/호스트/airflow 디렉토리가 생기고 그안에 초기화되어 생성된 파일이 생김
2) sqlite DB에 유저 생성
/home/호스트/.local/bin/airflow users create \
--username admin \
--firstname Admin \
--lastname spidyweb \
--role Admin \
--email admin@spidyweb.com
airflow webserver에 로그인할 계정 생성(비밀번호 설정)
/home/호스트/.local/bin/airflow webserver -p 8080
웹서버 띄운 후 로그인 확인 (ec2 기준 security group에 inbound rule에 8080포트를 열어놔야합니다)
virtual box이라면 네트워크 포트포워딩 8080이 열려 있어야합니다.
포트포워딩 설정
https://spidyweb.tistory.com/213?category=910416
3. mysql에 메타데이터 저장하기
mysql이 설치 되지 않으신 분은 아래의 링크를 참조해 주세요
2021.06.26 - [LINUX] - [Linux] ubuntu 18.04에 MySQL, PostgreSQL 설치하기
1) mysql db 생성 및 권한 부여
mysql 접속
mysql -u root -p
airflow DB생성
create database airflow;
root유저에 airflowDB권한 부여하기
grant all privileges on airflow.* to 'root'@'localhost';
2) airflow.cfg 설정
cd /home/호스트/airflow
nano airflow.cfg
해당 부분처럼 수정
sql_alchemy_conn = mysql://root:root@localhost:3306/airflow
저장하고 나온 후
/home/호스트/.local/bin/airflow db init
mysql에 meta가 써졌는지 확인
mysql -u root -p
use airflow;
show tables;
mysql에는 users가 아직 등록 되지 않았다.(아까 등록한 유저는 sqlite에 저장되어있다)
mysql DB에 유저 등록
/home/호스트/.local/bin/airflow users create \
--username admin \
--firstname Admin \
--lastname spidyweb \
--role Admin \
--email admin@spidyweb.com
마찬가지로 webserver로 확인
/home/호스트/.local/bin/airflow webserver -p 8080
admin 그리고 설정한 비밀번호로 로그인
4. webserver, scheduler 서비스로서(데몬으로) 등록하기
일단 dag가 daemon에서 잘 돌아가는지 확인하기 위할 test dag생성
/home/호스트/airlfow 안에 dags 디렉토리 생성
cd /home/호스트/airflow
mkdir dags
cd dags
nano test.py
from datetime import datetime, timedelta
from airflow import DAG
from airflow.operators.bash import BashOperator
from airflow.operators.dummy import DummyOperator
from airflow.utils.dates import days_ago
default_args = {
'owner': 'spidyweb',
'retries': 0,
'retry_delay': timedelta(seconds=20),
'depends_on_past': False
}
dag_Spark_api = DAG(
'dag_Spark_api_id',
start_date=days_ago(2),
default_args=default_args,
schedule_interval='*/10 * * * *',
catchup=False,
is_paused_upon_creation=False,
)
cmd="echo 'test succeed'"
#시작을 알리는 dummy
task_start = DummyOperator(
task_id='start',
dag=dag_Spark_api,
)
test_task = BashOperator(
task_id='test',
dag=dag_Spark_api,
bash_command=cmd,
)
#의존관계 구성
task_start >> test_task
서비스 파일 만들기
cd /etc/systemd/system
sudo nano airflow-webserver.service
airflow-webserver.service
[Unit]
Description=Airflow webserver daemon
After=network.target mysql.service
wants=mysql.service
[Service]
Environment="PATH=/home/ubuntu/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
User=ubuntu
Group=ubuntu
Type=simple
ExecStart=/home/ubuntu/.local/bin/airflow webserver -p 8080
Restart=on-failure
RestartSec=5s
PrivateTmp=true
[Install]
WantedBy=multi-user.target
user, group은 따로 유저를 만들지 않은 이상, 호스트네임으로 설정
execStart는 webserver를 실행 시킬 수 있는 airflow모듈이 있는 위치를 지정하여 webserver 실행 명령어를 적어놓는다.
sudo nano airflow-scheduler.service
airflow-scheduler.service
[Unit]
Description=Airflow webserver daemon
After=network.target mysql.service
wants=mysql.service
[Service]
Environment="PATH=/home/ubuntu/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
User=ubuntu
Group=ubuntu
Type=simple
ExecStart=/home/ubuntu/.local/bin/airflow scheduler
Restart=on-failure
RestartSec=5s
PrivateTmp=true
[Install]
WantedBy=multi-user.target
데몬 재실행
sudo systemctl daemon-reload
서버 실행시 자동으로 시작되게끔 하기
sudo systemctl enable airflow-webserver
sudo systemctl enable airflow-scheduler
서비스 시작하기
sudo systemctl start airflow-webserver
sudo systemctl start airflow-scheduler
서비스 상태 확인하기
sudo systemctl status airflow-webserver
sudo systemctl status airflow-scheduler
service로 실행된 airflow dag파일 제대로 실행됐는지 확인
아까 생성한 test.py dag가 성공적으로 실행 됐고 원하는 대로 출력됨