일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- SQL
- jmx-exporter
- metadabatase
- sparkstreaming
- airflow
- MSA
- vectorDB
- airflow설치
- ubuntu
- 루프백주소
- javascript
- spark
- aiagent
- Streamlit
- Python
- milvus
- amazonlinux
- Redshift
- BigQuery
- prometheus
- pySpark
- 오블완
- 설치
- hadoop
- grafana
- kafka
- RAG
- Dag
- dockercompose
- docker
- Today
- Total
데이터 노트
[Airflow/설치] Docker로 Airflow 설치 본문
사용할 Airflow 버전 : 2.6.0
실행 환경 : Mac
설치
1. docker-compose.yaml 파일 다운로드
curl -LfO 'https://airflow.apache.org/docs/apache-airflow/2.6.0/docker-compose.yaml'
포함된 내용은 엄청 길어서 그 중 확인이 필요한 서비스 목록 및 내용만 확인해보았다.
- airflow-scheduler : 모든 task와 DAG를 모니터링
- airflow-webserver : 에어플로우 웹 서버. http://localhost:8080
- airflow-worker : 스케줄러로부터 부여된 테스크들을 실행하기 위한 워커
- airflow-init : 서비스 이니셜라이제이션
- postgres(DB) : 데이터 베이스
- redis : 스케줄러에서 워커로 메시지를 보내는 브로커
* 서비스는 Celery Executor로 실행됨 - airflow 컨테이너 내부의 마운트되는 디렉토리 경로
volumes:
- ${AIRFLOW_PROJ_DIR:-.}/dags:/opt/airflow/dags
- ${AIRFLOW_PROJ_DIR:-.}/logs:/opt/airflow/logs
- ${AIRFLOW_PROJ_DIR:-.}/plugins:/opt/airflow/plugins
2. 컨테이너 띄우기
docker compose up -d
BUT 이대로 docker compose up 하면 warning 발생
WARN[0000] The "AIRFLOW_UID" variable is not set. Defaulting to a blank string.
docker-compose.yaml 파일 내에서 환경 변수를 사용하는데, AIRFLOW_UID 변수가 설정되지 않았기 때문에 발생.
** AIRFLOW_UID 설정 이유
- Docker 컨테이너 내부에서 생성된 파일과 디렉토리는 기본적으로 root 사용자(UID 0)에 의해 생성된다.
그러나 호스트 시스템에서 이 파일들을 접근하고 수정하려면 파일 소유자가 호스트 시스템의 사용자와 일치해야 하므로, 이를 위해 AIRFLOW_UID 변수를 사용하여 컨테이너 내부에서 파일을 생성할 때 사용할 사용자 ID를 지정할 수 있다.
- UID(User ID), GID(Group ID)
해당 프로세스를 실행한 사용자의 정보를 나타냅니다.
UID는 사용자의 아이디를 나타내며 0~32767의 숫자로 나타내고 0은 슈퍼(root)유저를 나타냅니다.
그리고 리눅스에서는 사용자를 그룹으로 묶을 수 있는데 이 그룹을 구분지을 수 있는 ID가 GID입니다.
vim .env
AIRFLOW_UID=50000
mkdir -p ./dags ./logs ./plugins ./config
echo -e "AIRFLOW_UID=$(id -u)" > .env
데이터베이스 초기화
docker compose up airflow-init
까지 완료하고 나서 컨테이너를 띄운다.
docker compose up -d
3. 보다 쉽게 실행하기 위한 스크립트 생성
curl -LfO 'https://airflow.apache.org/docs/apache-airflow/2.6.0/airflow.sh'
chmod +x airflow.sh
쉘 스크립트 확인해 보면 이렇게 적혀있는데, 나는 매번 삭제 되지 않게 하기 위해 --rm 커맨드는 삭제했다.
if [ $# -gt 0 ]; then
exec $dc run --rm airflow-cli "${@}"
else
exec $dc run --rm airflow-cli
fi
4. 컨테이너 올리고 내리기
# 컨테이너 올리기
./airflow.sh up
# 컨테이너 내리기
./airflow.sh up
Ref.
- https://airflow.apache.org/docs/apache-airflow/stable/howto/docker-compose/index.html
'Data Engineering > Airflow' 카테고리의 다른 글
[Airflow] 메타데이터베이스를 통한 dag 실행 이력 조회 (0) | 2024.08.15 |
---|---|
[Airflow] Dag 인식이 안 될 때 (0) | 2023.08.08 |