2022.08.11

[Airflow] Documentation 해석하며 내 맘대로 Windows에서 Local로 Airflow 실행하기 (Feat. WSL Ubuntu)

 

 

 

 

 

학부 과정에서 진행한 프로젝트는 데이터의 볼륨이 크지 않기 때문에 크론탭만 이용하여도 충분하였지만,

데이터 엔지니어로서 복잡하고 볼륨이 큰 데이터를 자동화하여 수집하기 위해서는 workflow 관리 플랫폼인 Airflow가 필요합니다.

 

그래서 오늘은 Airflow의 documentation을 해석하며 제 마음대로 Airflow를 공부하고 실행해보려 합니다.

설치 과정 중에 시행착오를 겪은 내용들도 모두 글에 같이 담아냈기 때문에,

글을 읽으면서 제가 겪은 과정들을 따라하시기보다는 그냥 끝까지 한 번 쭉 읽어보시기를 추천드립니다.

 

 

 

Airflow의 Documentation

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

 

Apache Airflow Documentation — Airflow Documentation

 

airflow.apache.org

 

 

 

 

 


 

 

 

 

 

Apache Airflow

 

 

 

Apache Airflow는 전 세계에서 가장 많이 사용되는 workflow 관리 플랫폼으로, 프로그래밍 방식으로 workflow를 작성, 예약, 모니터링할 수 있도록 도와주는 플랫폼입니다.

Airbnb에서 개발한 python 기반의 플랫폼이고, 하나의 머신에서 동작하는 것이 아니라 여러 개의 머신에서 분산하여 작업할 수 있다는 장점을 가지고 있습니다.

workflow는 DAG(Directed Acyclic Graphs)로 작성할 수 있고, 스케줄러는 지정된 dependency를 따르면서 배열에 따라 작업을 실행합니다.

 

참고로 Airflow는 데이터 스트리밍 솔루션이 아닙니다. 작업 간의 메타데이터 교환은 가능하지만, A 작업에서 B 작업으로 데이터가 이동하지는 않는다고 합니다.

 

 

 

 

 


 

 

 

 

 

Apache Airflow의 특징

 

 

 

documentation을 해석하며 간단하게 Airflow의 4가지 특징에 대해 정리해보았습니다.

 

 

  • Dynamic (동적)
    • 파이프라인은 동적 파이프라인 생성을 허용하는 python 코드로 구성됩니다. 이를 통해 파이프라인을 동적으로 인스턴스화하는 코드를 작성할 수 있습니다.
  • Extension (확장성)
    • 사용자 환경의 abstraction 수준에 맞도록 사용자의 operator와 executor를 쉽게 정의할 수 있고 라이브러리를 확장할 수 있습니다.
  • Elegant (우아함)
    • 파이프라인이 깔끔하고 명확하며, 스크립트를 매개변수화하는 기능이 내장되어 있습니다.
  • Scalable (크기 확장성)
    • 모듈형 아키텍처를 가지고 있습니다. 메시지 큐를 사용하여 worker 수를 조정할 수 있고 무한대로 확장할 수 있습니다.

 

 

 

 

 


 

 

 

 

 

Local에서 실행? Docker에서 실행?

 

 

 

documentation을 보면 Airflow를 실행하는 방법으로 크게 두 가지를 소개합니다.

하나는 local에서 실행하는 것이고, 하나는 docker에서 실행하는 것입니다.

저는 아직 docker를 사용할 줄 모르기 때문에 일단 local에서 실행하기로 결정하였습니다.

 

local에서 Airflow를 실행하기 위해서는 python3 환경이 필요하며, 현재 공식적으로 지원되는 것은 'pip' 뿐이고 'poetry'나 'pip-tools'는 지원되지 않는다고 합니다.

저는 python3가 이미 설치되어 있는 상태이기 때문에 python3를 설치하는 과정은 생략하였습니다.

 

 

 

 

 

 


 

 

 

 

 

Windows에서 Anaconda로 가상환경을 설정한 후 Airflow 설치하기

 

 

 

documentation을 보면 Airflow를 local에서 실행할 때 Windows가 아닌 Linux 환경에서 실행하였습니다.

그러나 당시 저의 작업 환경은 아직 Ubuntu를 설치하지 않은 Windows 환경이었습니다.

그래서 그냥 평소 작업하던대로 Windows에서 Anaconda로 가상환경을 설정한 후 Airflow를 실행해보기로 하였습니다. (무지했기 때문에 할 수 있었던 발상이었습니다..ㅎㅎ)

 

 

 

일단 Anaconda에 'airflow'라는 이름의 가상환경을 만들어주었습니다.

 

 

 

pip install apache-airflow

 

그리고 위의 명령어로 Airflow를 설치하니, 잘 설치되다가 마지막에 저런 에러가 떴습니다.

 

ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.
anaconda-project 0.10.2 requires ruamel-yaml, which is not installed.
jupyter-server 1.13.5 requires pywinpty<2; os_name == "nt", but you have pywinpty 2.0.2 which is incompatible.

 

호환되지 않는다는 말 같은데 검색해도 관련 내용이 안 나오길래 일단 Airflow가 잘 설치되었는지를 확인해보았습니다.

 

 

'pip list' 명령어로 설치가 잘 되었는지 확인해보니 Airflow 설치는 잘 되어 있어서 그 다음 단계를 진행하기로 하였습니다.

 

 

 

airflow db init

 

위의 명령어를 입력해 DB를 초기화 해주었습니다.

 

 

 

# 여러 줄 명령어
airflow users create \
--username {Login_ID} \
--firstname {First_NAME} \ 
--lastname {Last_NAME} \
--role Admin \		# Admin은 고정
--email {Email}

# 한 줄 명령어
airflow users create -u {Login_ID} -f {First_NAME} -l {Last_NAME} -r Admin -e {Email}

 

그리고 위의 명령어로 user 계정을 생성해주었습니다.

 

 

 

airflow webserver --port 8080

 

마지막으로 위의 명령어로 웹 서버를 띄워줘야 하는데.. 에러가 났습니다ㅠㅠ

그런데 에러를 찾아봐도 관련 내용이 없어 어떻게 해야할지 감이 잡히지 않았습니다.

그렇게 계속 찾아보던 중 Airflow는 아직 Windows 버전의 공식 설치를 지원하지 않는다는 것을 확인하였습니다.

대신 Windows에서 Airflow를 설치할 수 있는 두 가지 방법을 알게 되었습니다.

 

  1. WSL을 이용해 Windows에서 Linux 환경을 구축하기
  2. Docker를 사용하기

 

 

 

 

 


 

 

 

 

 

WSL을 사용하여 Windows에 Linux 환경 구축하기

 

 

 

docker를 배우는 것보다는 WSL로 Linux 환경을 구축하는 것이 훨씬 빠를 것 같다고 생각하였습니다.

그래서 WSL을 사용하여 Windows에 Linux 환경을 구축해보았습니다.

 

 

 

WSL을 사용하여 Windows에 Linux를 설치하는 Documentation

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

 

WSL 설치

wsl --install 명령을 사용하여 Linux용 Windows 하위 시스템을 설치합니다. Ubuntu, Debian, SUSE, Kali, Fedora, Pengwin, Alpine 등 원하는 Linux 배포판에서 실행되는 Windows 머신에서 Bash 터미널을 사용할 수 있습니다.

docs.microsoft.com

 

 

 

documentation을 따라하니 WSL의 설치 과정은 매우 간단하였습니다.

일단 'Windows PowerShell'을 관리자 모드로 열어준 후 'wsl --install' 명령어로 WSL을 설치해주면 끝이었습니다.

 

 

 

그 다음에 'Microsoft Store'에서 'Ubuntu'를 검색해 설치해주었습니다.

 

처음에는 최신 버전인 'Ubuntu 22.04 LTS'를 설치해서 실행했는데 정상적으로 실행이 되지 않고 계속 로딩 화면에만 머물렀습니다.

그래서 'Ubuntu'도 설치해서 사용해보았는데, 역시나 같은 문제로 실행이 되지 않았습니다.

구글링해도 이유를 알 수 없었고 다른 버전을 설치해도 여전히 실행이 되지 않았습니다.

 

 

 

혹시나 하는 마음에 재부팅을 하고 다시 실행해보았는데, 그러니 정상적으로 실행이 되었습니다.

이 글을 보시는 여러분들은 꼭! WSL 설치 후 재부팅을 해주세요!

 

 

 

 

 


 

 

 

 

 

Ubuntu에서 Airflow 설치하기

 

 

 

Ubuntu를 설치하여 Linux 환경을 구축한 후 다시 documentation을 따라 Airflow를 실행해보았습니다.

실습은 'Ubuntu 22.04 LTS'로 진행하였습니다.

 

# Airflow needs a home. `~/airflow` is the default, but you can put it
# somewhere else if you prefer (optional)
export AIRFLOW_HOME=~/airflow

# Install Airflow using the constraints file
AIRFLOW_VERSION=2.3.3
PYTHON_VERSION="$(python --version | cut -d " " -f 2 | cut -d "." -f 1-2)"
# For example: 3.7
CONSTRAINT_URL="https://raw.githubusercontent.com/apache/airflow/constraints-${AIRFLOW_VERSION}/constraints-${PYTHON_VERSION}.txt"
# For example: https://raw.githubusercontent.com/apache/airflow/constraints-2.3.3/constraints-3.7.txt
pip install "apache-airflow==${AIRFLOW_VERSION}" --constraint "${CONSTRAINT_URL}"

# The Standalone command will initialise the database, make a user,
# and start all components for you.
airflow standalone

# Visit localhost:8080 in the browser and use the admin account details
# shown on the terminal to login.
# Enable the example_bash_operator dag in the home page

 

위의 명령어를 그대로 복사한 후 Ubuntu에 입력해주면 됩니다.

 

 

 

# 이 명령어 말고
PYTHON_VERSION="$(python --version | cut -d " " -f 2 | cut -d "." -f 1-2)"
# 이 명령어로
PYTHON_VERSION="$(python3 --version | cut -d " " -f 2 | cut -d "." -f 1-2)"

 

이때 세 번째 명령어에서 'python'이라고만 입력하면 다음과 같은 오류가 납니다.

 

command 'python' not found, did you mean:
command 'python3' from deb python3
command 'python' from deb python-is-python3

 

그러니 꼭 'python'을 'python3'로 바꿔서 입력해주세요!

 

 

 

export AIRFLOW_HOME=~/airflow
AIRFLOW_VERSION=2.3.3
PYTHON_VERSION="$(python3 --version | cut -d " " -f 2 | cut -d "." -f 1-2)"
CONSTRAINT_URL="https://raw.githubusercontent.com/apache/airflow/constraints-${AIRFLOW_VERSION}/constraints-${PYTHON_VERSION}.txt"
pip install "apache-airflow==${AIRFLOW_VERSION}" --constraint "${CONSTRAINT_URL}"

 

다음과 같이 정리해놓은 명령어를 Ubuntu에 복사한 후 그대로 붙여넣기 해주었습니다.

 

 

그러면 이렇게 정상적으로 실행되는 것을 확인할 수 있습니다.

 

 

 

airflow db init

 

그리고 위의 명령어로 DB를 초기화 시켜준 후,

 

 

# 여러 줄 명령어
airflow users create \
--username {Login_ID} \
--firstname {First_NAME} \ 
--lastname {Last_NAME} \
--role Admin \		# Admin은 고정
--email {Email}

# 한 줄 명령어
airflow users create -u {Login_ID} -f {First_NAME} -l {Last_NAME} -r Admin -e {Email}


# Airflow 웹 서버 띄우는 명령어
airflow webserver --port 8080

 

위의 명령어로 user 계정을 생성하고, 웹 서버를 띄워줍니다.

 

 

 

 

그 다음에 url에 'localhost:8080'를 검색해서 들어가면, 다음과 같이 Airflow 웹 서버가 띄워진 것을 확인할 수 있습니다!

Airflow 실행에 성공했습니다!

 

 

 

 

 


 

 

 

 

 

요약

 

1. Airflow는 아직 Windows 버전의 공식 설치를 지원하지 않는다.

2. 그렇다면 Windows 환경에서 WSL를 이용해 Linux 환경을 구축해주면 된다.

3. 이후 명령어를 차례로 입력하면, Local에서 쉽게 Airflow를 실행할 수 있다.

 

 

 

 

복사했습니다!