Airflow 란?
Apache Airflow는 데이터 파이프라인을 자동화하고, 작업을 스케줄링하며, 워크플로우를 관리하는 데 사용되는 오픈 소스 도구입니다. 머신러닝 작업에 있어 Airflow는 데이터 수집, 모델 훈련, 모델 평가, 배포 등의 다양한 단계에 걸쳐 파이프라인을 효율적으로 관리할 수 있게 도와줍니다. 또한, Airflow는 Kubernetes(K8s) 환경과의 호환성도 제공하여 분산 시스템에서 작업을 쉽게 스케줄링하고 관리할 수 있습니다.
1. Apache Airflow 개념
Apache Airflow는 기본적으로 **DAG(Directed Acyclic Graph)**를 사용하여 파이프라인을 정의하고, 이 DAG 내에서 작업(Tasks)을 정의하여 순차적, 병렬적, 조건부로 실행할 수 있게 해줍니다. DAG는 각 작업을 어떻게 실행할지에 대한 흐름과 의존성을 명시합니다.
- DAG (Directed Acyclic Graph): DAG는 작업들의 실행 순서를 정의하는 그래프입니다. 각 작업은 Task로 정의되며, Task 간 의존성은 set_upstream, set_downstream 등을 통해 설정합니다.
- Operator: Airflow는 다양한 유형의 작업을 정의하기 위한 Operator를 제공합니다. 예를 들어, PythonOperator, BashOperator, EmailOperator 등이 있습니다. 각각의 Operator는 특정 종류의 작업을 실행하는 역할을 합니다.
- Scheduler: Airflow의 스케줄러는 설정된 시간에 DAG를 주기적으로 실행합니다. 스케줄러는 DAG가 주기적으로 실행되도록 관리합니다.
- Executor: Airflow는 여러 종류의 Executor를 제공하여 작업이 어떻게 실행될지 제어합니다. SequentialExecutor, LocalExecutor, CeleryExecutor, KubernetesExecutor 등이 있습니다.
2. Airflow를 머신러닝에 활용하는 방법
Airflow는 머신러닝 프로젝트의 여러 단계를 자동화하는 데 유용하게 사용됩니다. 예를 들어:
- 데이터 파이프라인 관리: 데이터 수집, 전처리, 특성 추출 등 데이터를 준비하는 작업을 관리합니다.
- 모델 훈련 및 튜닝: 훈련 데이터를 모델에 전달하고, 모델 훈련 및 하이퍼파라미터 튜닝 작업을 자동화합니다.
- 모델 평가 및 테스트: 훈련된 모델을 테스트하고 성능을 평가하는 작업을 자동으로 수행합니다.
- 모델 배포: 훈련된 모델을 배포하여 예측 서비스를 제공하는 단계도 자동화할 수 있습니다.
- 모니터링 및 알림: 머신러닝 파이프라인의 각 단계가 성공적으로 완료되었는지 확인하고, 실패 시 알림을 제공합니다.
3. Kubernetes 환경에서의 Airflow 설치 및 사용법
Kubernetes는 Airflow와 잘 통합되며, KubernetesExecutor를 사용하여 Airflow의 작업을 Kubernetes에서 실행할 수 있습니다. 이 방법은 클러스터 리소스를 효율적으로 사용하고, 분산 환경에서 작업을 실행하는 데 유리합니다.
Kubernetes에서 Airflow 설치 방법
<1. Helm을 통한 Airflow 설치>
Helm은 Kubernetes에서 애플리케이션을 관리하고 배포하는 데 유용한 패키지 관리자입니다. Helm을 사용하여 Airflow를 설치하는 방법은 매우 간단합니다.
설치 순서:
1-1. Helm 설치 (Helm이 설치되지 않은 경우)
# Helm 설치 (Mac 예시)
brew install helm
1-2. Airflow Helm 차트 설치: Airflow 공식 Helm 차트를 사용하여 Kubernetes 클러스터에 Airflow를 설치합니다.
# Airflow의 Helm 차트를 설치할 수 있는 저장소 추가
helm repo add apache-airflow https://airflow.apache.org
helm repo update
1-3. Airflow 설치: Kubernetes 클러스터에 Airflow를 설치합니다.
helm install airflow apache-airflow/airflow \
--namespace airflow \
--create-namespace \
--set executor=KubernetesExecutor \
--set airflow.image.repository=apache/airflow \
--set airflow.image.tag=2.5.0 \
--set airflow.image.pullPolicy=Always \
--set redis.enabled=true \
--set postgresql.enabled=true
위 명령은 Kubernetes 클러스터에 Airflow를 설치하고, KubernetesExecutor를 사용하여 작업을 실행하도록 설정합니다. Redis와 PostgreSQL은 기본적으로 사용되는 데이터베이스로 설정됩니다.
1-4. Airflow 웹 UI 접근: Helm 차트를 사용하여 Airflow를 설치하면 웹 UI를 통해 Airflow 대시보드에 접근할 수 있습니다. 설 치 후,kubectl port-forward명령어로 웹 UI에 접근합니다.
kubectl port-forward svc/airflow-webserver 8080:8080 --namespace airflow
웹 브라우저에서 http://localhost:8080으로 접속하여 Airflow UI에 로그인할 수 있습니다.
1-5. KubernetesExecutor 설정: KubernetesExecutor는 Airflow에서 Kubernetes 클러스터 내에서 작업을 실행하는 방식입니다. 각 작업이 독립적인 Pod로 실행되므로, Kubernetes의 자원을 효율적으로 활용할 수 있습니다.
Helm 설치 시 --set executor=KubernetesExecutor를 추가하여 이 설정을 적용합니다.
<2. Airflow KubernetesExecutor 사용법>
Airflow에서 KubernetesExecutor를 사용하면 각 작업이 Kubernetes Pod로 실행됩니다. 이를 통해 작업을 확장 가능하게 관리할 수 있으며, Kubernetes의 자동 스케일링, 리소스 할당 등을 활용할 수 있습니다.
- Executor 설정: Airflow를 설치할 때 --set executor=KubernetesExecutor를 설정합니다.
- PodOperator 사용: KubernetesPodOperator는 Airflow의 작업을 Kubernetes Pod에서 실행할 수 있도록 해줍니다.
예를 들어, Python 작업을 Kubernetes Pod에서 실행하려면 KubernetesPodOperator를 다음과 같이 사용합니다:
from airflow.providers.cncf.kubernetes.operators.kubernetes_pod import KubernetesPodOperator
from airflow import DAG
from datetime import datetime
dag = DAG('ml_workflow', start_date=datetime(2024, 1, 1))
task = KubernetesPodOperator(
namespace='default',
image="python:3.8",
cmds=["python", "-c", "print('Hello, Kubernetes!')"],
name="python-task",
task_id="run-python-task",
get_logs=True,
dag=dag,
)
이 예시에서 KubernetesPodOperator는 Python 3.8 이미지를 사용하여 Kubernetes에서 Python 작업을 실행합니다.
Kubernetes에서 리소스 설정: 작업이 실행될 때마다 리소스(CPU, 메모리) 요구 사항을 설정할 수 있습니다. 예를 들어, 작업에 대해 최소한의 CPU나 메모리 리소스를 할당할 수 있습니다.
task = KubernetesPodOperator(
namespace='default',
image="python:3.8",
cmds=["python", "-c", "print('Hello, Kubernetes!')"],
name="python-task",
task_id="run-python-task",
get_logs=True,
resources={'request_cpu': '500m', 'request_memory': '1Gi'},
dag=dag,
)
4. 기타 고려사항
- 헬름 차트 설정: Helm 차트에 포함된 다양한 설정을 통해 Airflow 클러스터의 리소스를 설정하고, 네트워크 및 데이터베이스 연결 등을 맞출 수 있습니다.
- 모니터링: Kubernetes와 결합한 Airflow는 Prometheus와 Grafana 같은 모니터링 도구와 쉽게 통합할 수 있습니다. 이를 통해 파이프라인의 상태를 실시간으로 확인할 수 있습니다.
AirFlow 도입 사례:
버킷플레이스 Airflow 도입기 - 오늘의집 블로그
탁월한 데이터플랫폼을 위한 Airflow 도입기
www.bucketplace.com
'클라우드' 카테고리의 다른 글
[kubenetes] CKA 자격증 시험 대비 스터디 (1) | 2024.12.18 |
---|---|
[K8S] kubernetes 기본 & 운영 명령어 (0) | 2024.11.27 |
[Elasticsearch] index 의 shard(샤드) 개념 (0) | 2024.11.27 |
베어 메탈(Bare Metal)이란.. (0) | 2023.06.15 |