🚀 데이터 엔지니어링

에어플로우 윈도우 WSL에 설치 (Installing Airflow Window WSL)

토심 2024. 5. 21. 11:14

 

1. 윈도우에는 바로 설치가 안되므로 WSL을 설치

https://learn.microsoft.com/ko-kr/windows/wsl/install

wsl --install

 

2. 설치한 WSL에 도커를 설치

https://docs.docker.com/engine/install/ubuntu/

충돌하는 모든 패키지를 제거하려면 다음 명령을 실행

for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done


2.1. Docker apt 저장소를 설정

# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

# Add the repository to Apt sources:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update

 

2.2. Docker 패키지를 설치

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

 

2.3. 이미지 를 실행하여 Docker 엔진 설치가 성공했는지 확인

sudo docker run hello-world

 

 

간혹 이 부분에서 

docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?. & System has not been booted with systemd as init system (PID 1). Can't operate.

 

이런 에러가 뜨면 wsl을 최신 버전으로 업데이트 하면 된다.

wsl --update

 

3. 설치한 도커에 에어플로우 설치

https://airflow.apache.org/docs/apache-airflow/stable/howto/docker-compose/index.html

 

Docker 엔진에 최소 4GB 메모리(이상적으로는 8GB)를 할당해야 함.

다음 명령을 실행하여 메모리가 충분한지 확인.

docker run --rm "debian:bullseye-slim" bash -c 'numfmt --to iec $(echo $(($(getconf _PHYS_PAGES) * $(getconf PAGE_SIZE))))'

 

Docker Compose에 Airflow를 배포하려면 docker-compose.yaml 을 가져와야 함.

curl -LfO '<https://airflow.apache.org/docs/apache-airflow/2.8.1/docker-compose.yaml>'

 

이 파일에는 여러 서비스 정의가 포함되어 있다.

  • airflow-scheduler- 스케줄러는 모든 작업과 DAG를 모니터링한 다음 종속성이 완료되면 작업 인스턴스를 트리거
  • airflow-webserver- 웹서버 이용 가능 http://localhost:8080.
  • airflow-worker- 스케줄러가 지정한 작업을 실행하는 작업자
  • airflow-triggerer- 트리거러는 지연 가능한 작업에 대해 이벤트 루프를 실행
  • airflow-init- 초기화 서비스
  • postgres- 데이터베이스.
  • redis- redis - 스케줄러에서 작업자로 메시지를 전달하는 브로커

 

Linux 에서 빠른 시작은 호스트 사용자 ID를 알아야 하며 그룹 ID를 0으로 설정해야 함.

그렇지 않으면 dags, 로그 및 플러그인에서 생성된 파일은 루트 사용자 소유권으로 생성된다.

docker-compose에 대해 구성해야 한다.

mkdir -p ./dags ./logs ./plugins ./config
echo -e "AIRFLOW_UID=$(id -u)" > .env

 

 

다른 운영 체제의 경우 AIRFLOW_UID가 설정되지 않았다는 경고가 표시될 수 있지만 무시해도 된다.

경고를 제거하려면 다음 내용을 사용하여 docker-compose.yaml과 동일한 폴더에 .env 파일을 수동으로 생성할 수도 있다.

AIRFLOW_UID=50000

 

 

데이터베이스 초기화(Initialize the database)

모든 운영 체제 에서 데이터베이스 마이그레이션을 실행하고 첫 번째 사용자 계정을 만들어야 한다.

sudo docker compose up airflow-init

 

 

실행

sudo docker compose up
$ docker ps
CONTAINER ID   IMAGE                  COMMAND                  CREATED          STATUS                    PORTS                              NAMES
247ebe6cf87a   apache/airflow:2.8.1   "/usr/bin/dumb-init …"   3 minutes ago    Up 3 minutes (healthy)    8080/tcp                           compose_airflow-worker_1
ed9b09fc84b1   apache/airflow:2.8.1   "/usr/bin/dumb-init …"   3 minutes ago    Up 3 minutes (healthy)    8080/tcp                           compose_airflow-scheduler_1
7cb1fb603a98   apache/airflow:2.8.1   "/usr/bin/dumb-init …"   3 minutes ago    Up 3 minutes (healthy)    0.0.0.0:8080->8080/tcp             compose_airflow-webserver_1
74f3bbe506eb   postgres:13            "docker-entrypoint.s…"   18 minutes ago   Up 17 minutes (healthy)   5432/tcp                           compose_postgres_1
0bd6576d23cb   redis:latest           "docker-entrypoint.s…"   10 hours ago     Up 17 minutes (healthy)   0.0.0.0:6379->6379/tcp             compose_redis_1

 

4. 에어플로우 웹 서버 접속

http://localhost:8080/home

ID : airflow

PASS : airflow


FIN.