BigData/Apache Airflow

[Airflow] Airflow 설치 + mysql로 DB지정하기 +서비스(데몬으로) 등록하기

스파이디웹 2022. 2. 10. 10:18
728x90

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 

 

[Hadoop] virtual box linux [ubuntu 18.04]에 하둡 설치,다운로드 2.ubuntu terminal과 SSH 통신

1.ubuntu에 openssh-server 설치 2.ssh 시작하기 3.포트포워딩 설정하기 virtualbox 설정 - 네트워크 - 포트포워딩 + 클릭 - ubuntu를 만들게되면 보통 ip가 10.0.2.15로 할당됩니다. 여기서 중요한건 게스트ip..

spidyweb.tistory.com


3. mysql에 메타데이터 저장하기

mysql이 설치 되지 않으신 분은 아래의 링크를 참조해 주세요

2021.06.26 - [LINUX] - [Linux] ubuntu 18.04에 MySQL, PostgreSQL 설치하기

 

[Linux] ubuntu 18.04에 MySQL, PostgreSQL 설치하기

1.MySQL 설치 1) apt-get update sudo apt-get update 2) MySQL server 설치 sudo apt-get install mysql-server 3) mysql 실행하기 sudo systemctl start mysql #시작할때 자동으로 mysql실행하기 sudo..

spidyweb.tistory.com

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가 성공적으로 실행 됐고 원하는 대로 출력됨

 

728x90