일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
- emptyDir
- grafana
- ingress
- k8s
- NFS Client Privisioner
- codecommit
- Naver cloud platform
- Prometheus
- pod
- kubernetes
- Codepipeline
- RKE2
- volume
- cicd
- Codebuild
- emptyDir Volume
- ALB
- DevOps
- alertmanager
- aws-dop
- ingress controller
- ncp
- slack
- AWS
- Persistent Volume
- SSL Offload
- Codedeploy
- node exporter
- HTTPS Redirect
- Persistent Volume Claim
- Today
- Total
Cloud SA's This and That
[Big Data] - Airflow 서버 구축 & DB 연동 본문
[AirFlow] - workflow management tool
목적 : 전체 Flow 파악 / 배치 파이프라인 모니터링 및 스케줄링 / 각 Task 병렬 처리 / 유연한 DAG 작성
다양한 워크플로우 매니지먼트 툴이 존재하며 대표적으로는 Airflow, oozie, Azkaban이 있다.
<AirFlow>
-실제로 데이터 처리가 이루어지는 것은 아님 / workflow 작성 및 모니터링 작업을 프로그래밍을 도와주는 플랫폼
-파이썬 기반으로 코드를 작성해 워크플로우 관리 / 콘솔을 통해서도 관리 가능
-다양한 벤더들과 호환 가능
>Airflow webserver : 웹 UI 표현 / workflow 상태표시 및 실행
>Airflow Scheduler : 작업 기준 충족 여부 확인 / 종속 작업이 성공 완료 및 예약 간격이 주어지면 실행 가능작업인지 실행 조건 충족 체크
>충족 체크가 DB에 기록되면 Task들이 Worker에게 선택되어 작업을 실행
>파이썬 기반으로 데이터 분석하는 분들에게 쉽게 코드 작성 가능
>Airflow 콘솔이 따로 존재해서 task 관리를 서버에 들어가 관리할 필요가 없음
>각각의 작업별 소요시간을 체크할 수 있어서 Bottleneck을 찾을 때 유용
>다양한 vendor들의 service들과도 쉽게 연계가 가능
[Airflow 서버 구축 및 DB 연동] - 간단히만 테스트 해보았다.
Os : linux (ubuntu 18.04)
1. Airflow 설치
$ apt install python3-pip # python과 pip 세팅 (python 버전이 3이여야 함)
$ pip3 install apache-airflow # pip을 통해 Airflow 패키지 설치
$ pip3 install cryptography psycopg2-binary boto3 botocore # 부가적으로 필요한 패키지 설치
$pip list
> 설치 확인
2. MySQL 설정
> MySQL에 Airflow를 위한 데이터베이스 생성
> airflow 데이터베이스 사용자 생성
3. Airflow 초기화
>Airflow 기본 디렉터리 생성 후 이동
>dags 디렉터리 생성
>환경변수 설정
$ airflow db init # 초기화 진행
>초기화 후 airflow 홈디렉터리에 생성된 파일들
/var/lib/airflow/airflow.cfg 수정 -> MySQL 연결
[변경 전]
[변경 후]
$ apt install libmysqlclient-dev -y. # Airflow에 MySQL을 연결하기 위해 필요한 패키지 추가 설치
$ pip3 install mysqlclient
$ airflow db init # 변경된 설정을 적용
**에러발생
에러 원인 : MySQL 전역변수 explicit_defaults_for_timestamp가 설정되지 않아서 발생
MySQL 설정 수정 (/etc/mysql/mysql.conf.d/mysqld.cnf)
$ systemctl restart mysql
다시 $ airflow db init
>설정 적용 성공
4. Airflow Scheduler & Webserver 실행
Airflow scheduler 실행
Airflow webserver 실행
Airflow Webserver 실행 후 Web 화면
+ <Apache Airflow - DAG>
그래프는 노드와 엣지로 표현하는데 방향이 있는 Directed Graph와 방향이 없는 Undirected Graph가 있다.
방향이 있는 Directed Graph에서 루프가 하나도 없다면 Directed Acyclic Graph(=DAG)이다.
즉 한쪽으로의 방향성만 가지는 특징을 가진다.
Airflow는 DAG를 잘 구성하여 원하는 형태의 DAG가 잘 실행되는지 살펴보는 워크플로우 툴이다.