BIGDATA/AIRFLOW
airflow, python 설치
옥토캣
2022. 3. 1. 21:34
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