airflow 설치를 위한 python 설치

python은 인터넷이 되는 환경이 필요하여 외부에서 설치한 후 설치프로그램을 개발서버에 배포 해야한다

spark, postgressql, pyspark 라이브러리도 같이 설치

0) 사전 설치

root계정으로 yum 명령어를 사용하여 아래 프로그램 설치

$ yum install -y gcc openssl openssl-devel zlib zlib-devel libffi-devel sqlite-devel

1) python3.9.9 다운로드

https://www.python.org/ftp/python/3.9.9/Python-3.9.9.tgz

$ cd ~/usr/local
$ tar -xvzf Python-3.9.9.tgz
$ cd Python-3.9.9

2) python 수동 설치

$ ./configure --prefix=/home/eva/usr/local/Python3.9.9
$ make
$ make install
(앞에서 bash_profile 참고하였으면 따로 환경변수 설정이 필요 없음)

3) ptyhon 실행 테스트

설치한 python버전으로 실행이 되는지 확인한다.

$ python3
Python 3.9.9 (main, Nov 27 2021, 19:06:08)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-44)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>

4) postgresql, pyspark, kafka 라이브러리 설치

postgresql 라이브러리를 실행하려면 libpq.so.5 파일이 필요한데 postgresql 설치파일 경로에 있음

bash_profile에 LD_LIBRARY_PATH에 등록이 되어있어야 함

(export LD_LIBRARY_PATH=$POSTGRES_HOME/lib)

$ pip3 install psycopg2
$ pip3 install pyspark
$ pip3 install kafka-python

5) airflow 설치

# pip파일을 업그레이드 해줘야 할 수도 있음
$ pip3 install --upgrade pip
# 설치하려는 airflow 버전과 설치 된 python 버전확인을 잘 해야함
$ pip3 install "apache-airflow==$2.2.2" --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-2.2.2/constraints-3.9.txt"

6) python 압축하여 배포

$ cd ~/usr/local
$ tar -czvf python.tar.gz Python3.9.9
압축항 파일을 개발서버에 옮겨서 압촉 해제
$ tar -xvzf python.tar.gz

7) airflow 실행 및 메타DB 연동 (postgresql)

# postgresql에 airflow계정 생성
$ psql wasadm postgres
postgres=# create user airflow with password 'airflow';
CREATE ROLE
postgres=# create database airflow_meta owner=airflow;
CREATE DATABASE
postgres=# create schema authorization airflow;
CREATE SCHEMA
postgres=# grant all privileges on all tables in schema airflow to airflow;
GRANT
postgres=# grant all privileges on database airflow_meta to airflow;
GRANT

# airflow.cfg 파일에 메타DB 연동 접속 정보를 넣어야 하는데
# 처음에는 파일이 없고 한번 airflow를 에러 발생 상관없이 실행을 시켜줘야 생성됨
# load_examples을 False로 설정해하고 DB를 초기화 해야한다. load_examples값만 False로 변경하면 예제 DAGs가 그대로 남아 있다.

# metaDB 접속정보를 가져오는 명령어
# 아래와 같이 에러나면 python 설치한 계정과 배포한 계정이 달라서 생기는 에러라 airflow파일을 열어서 경로를 수정해야함
$ airflow config get-value core sql_alchemy_conn
-bash: /home/wasadm/usr/local/Python3.9.9/bin/airflow: /home/eva/usr/local/Python3.9.9/bin/python3.9: bad interpreter: 그런 파일이나 디렉터리가 없습니다

# 처음 실행하면 default로 sqlite3 지정 됨
$ airflow config get-value core sql_alchemy_conn
sqlite:////home/wasadm/airflow/airflow.db

# 명령어로 실행하고 나면 airflow.cfg 파일 생성 되어있음 (생성위치 지정은 못 찾음)
$ vi ~/airflow.cfg
sql_alchemy_conn = postgres+psycopg2://airflow:airflow@dwschad01/airflow_meta

# DB초기화 후 airflow 실행
$ airflow db init
.....
INFO  [airflow.models.dag] Setting next_dagrun for tutorial_etl_dag to None
INFO  [airflow.models.dag] Setting next_dagrun for tutorial_taskflow_api_etl to None
INFO  [airflow.models.dag] Setting next_dagrun for tutorial_taskflow_api_etl_virtualenv to None
INFO  [airflow.models.dag] Sync 2 DAGs
INFO  [airflow.models.dag] Setting next_dagrun for example_subdag_operator.section-1 to None
INFO  [airflow.models.dag] Setting next_dagrun for example_subdag_operator.section-2 to None
Initialization done

$ airflow version
2.2.2

$ airflow users create --username admin --firstname jh --lastname j --role Admin --email jjh@email.com
[2021-11-29 12:32:41,811] {manager.py:763} WARNING - No user yet created, use flask fab command to do it.
[2021-11-29 12:32:42,012] {manager.py:512} WARNING - Refused to delete permission view, assoc with role exists DAG Runs.can_create Admin
Password:
Repeat for confirmation:
[2021-11-29 12:32:49,267] {manager.py:214} INFO - Added user admin
User "admin" created with role "Admin"

$ nohup airflow webserver --port 9090 > /dev/null 2>&1 &
$ nohup airflow scheduler > /dev/null 2>&1 &

8) postgresqlDB에 메타데이터 생성 확인, 사용자 DAG 추가 확인

db init을 성공하면 아래와 같이 메타 테이블이 생성된것을 확인할 수 있다

$ psql -h192.168.10.101 -Uairflow airflow_meta
psql (13.5)
Type "help" for help.

airflow_meta=> \dt
                    List of relations
 Schema |             Name              | Type  |  Owner
--------+-------------------------------+-------+---------
 public | ab_permission                 | table | airflow
 public | ab_permission_view            | table | airflow
 public | ab_permission_view_role       | table | airflow
 public | ab_register_user              | table | airflow
 public | ab_role                       | table | airflow
 public | ab_user                       | table | airflow
 public | ab_user_role                  | table | airflow
 public | ab_view_menu                  | table | airflow
 public | alembic_version               | table | airflow
 public | connection                    | table | airflow
 public | dag                           | table | airflow
 public | dag_code                      | table | airflow
 public | dag_pickle                    | table | airflow
 public | dag_run                       | table | airflow
 public | dag_tag                       | table | airflow
 public | import_error                  | table | airflow
 public | job                           | table | airflow
 public | log                           | table | airflow
 public | rendered_task_instance_fields | table | airflow
 public | sensor_instance               | table | airflow
 public | serialized_dag                | table | airflow
 public | sla_miss                      | table | airflow
 public | slot_pool                     | table | airflow
 public | task_fail                     | table | airflow
 public | task_instance                 | table | airflow
 public | task_reschedule               | table | airflow
 public | trigger                       | table | airflow
 public | variable                      | table | airflow
 public | xcom                          | table | airflow
(29 rows)

airflow_meta=>

아래와 같이 dags폴더에 모듈을 갖다 놓으면 자동으로 웹에 적용 됨

$ cd $AIRFLOW_HOME/dags
$ ll
합계 12
drwxr-xr-x 2 wasadm mwa 188 12월  8 14:50 __pycache__
-rw-r--r-- 1 wasadm mwa 895 12월  8 14:48 call_python.py
-rw-r--r-- 1 wasadm mwa 619 12월  8 14:48 sample2.py
-rw-r--r-- 1 wasadm mwa 583 12월  8 14:48 test_sjy.py
 

'BIGDATA > AIRFLOW' 카테고리의 다른 글

airflow hiveOperator 설치  (0) 2023.04.11
airflow hiveOperator 설치  (0) 2023.03.22
AIRFLOW metastore를 mariaDB로 사용하기  (0) 2022.03.01

+ Recent posts