본문 바로가기
Minding's Programming/Airflow

[Airflow] Connection Type 신규 추가하는 방법

by Minding 2024. 7. 31.
728x90
반응형

외부 서비스를 Airflow를 통해 이용하기 위해서 Hook을 사용하기 위해서는 그에 맞는 Connection이 먼저 등록되어야 한다. 하지만 Airflow에서 Connetion을 등록할 때 기본적으로 제공되는 Connection Type에 자신이 원하는 서비스가 존재하지 않을 수 있다. 그럴 때에는 직접 Connection Type을 추가해주어야 한다.

 

 

Connection Type 추가하기

 

Airflow에서 외부 서비스를 Hook으로 제공해주고 있으나 Connection Type이 없는 경우가 종종 있다. 예를 들어 HDFS와 Hive의 경우 Connection Type에 해당 서비스가 보이지 않는 점을 확인할 수 있다.

 

Connection Type에 노출되는 외부 서비스들은 기본적으로 패키지가 설치되어 있는 경우이다. 어떤 패키지가 설치되어 있는지는 웹서버 홈페이지에서 Admin - Providers 메뉴에 진입하면 알 수 있다.

 

당연하듯이 Providers에는 HDFS와 Hive가 없었다. 따라서, 해당 서비스를 이용하기 위한 패키지를 설치하면 Connection Type에 해당 서비스들이 노출될 것이다.

 

패키지를 설치하는 방법은 그렇게 어렵지 않다. Airflow 공식 홈페이지에 따르면 pip 명령을 통해 손쉽게 패키지를 설치할 수 있다.

# hdfs
pip install 'apache-airflow-providers-apache-hdfs'

# hive
pip install 'apache-airflow-providers-apache-hive'

 

* Docker 사용 시

 

그러나 나 처럼 docker 컨테이너를 통해 airflow를 구동하고 있다면 이야기가 달라진다. 로컬 또는 WSL과 같은 컴퓨터에 패키지를 설치하는 것이 아닌, 컨테이너에 해당 패키지가 설치되도록 해야한다. 컨테이너는 재구동할 때마다 초기화되기 때문에, 컨테이너에 진입해 pip 명령을 통해 패키지를 설치하는 것은 의미가 없다.

 

이를 해결하기 위해서는 각 컨테이너가 구동될 때 패키지 포함 여부를 결정하는 Image를 수정해야한다. 재구동 시에도 해당 패키지가 포함되도록 하기 위해서다.

 

** Airflow 이미지 Extend하는 방법

 

이미지를 커스텀화 하는 것에는 크게 두 가지 방법이 있다고 한다. Extend(확장)와 이미지를 새롭게 생성하는 방법이 있는데, 각 방법마다 장단점이 존재한다.

비교 Extend Customizing
간단성 O X
빌드 시간 짧음 상대적으로 긺
이미지 크기 최적화 X O (약 20% 사이즈 감소)
폐쇄망에서 구성 가능 여부 X O

 

나는 두 방법 중 Airflow의 기본 패키지가 있는 base image 위에 layer라는 개념을 씌우는 '확장(Extend)'을 시도해보려고 한다. 이미지를 Extend하는 방법은 공식 홈페이지에도 자세한 설명이 나와있다.

https://airflow.apache.org/docs/docker-stack/build.html

 

Building the image — docker-stack Documentation

 

airflow.apache.org

 

1) Docker file 만들기

 

우선 Airflow 디렉토리로 진입해 'Dockerfile'이라는 이름의 파일을 만들어주어야 한다.

cd; cd airflow
mkdir -p custom_image/airflow
cd custom_image/airflow
vi Dockerfile

 

FROM apache/airflow:{자신의 airflow 버전 / ex) 2.9.3}
USER root
RUN apt-get update \
	&& apt-get install -y --no-install-recommends \
       gcc \ 
       g++ \
       libsasl2-dev \
       heimdal-dev \
    && apt-get autoremove -yqq --purge \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/*
USER airflow
RUN pip install \
    apache-airflow-providers-apache-hdfs \
    apache-airflow-providers-apache-hive
RUN pip uninstall -y argparse

위 파일을 통해 기본 이미지에 layer를 쌓아줄 것이다. root로 접속해 apt-get update 및 install을 통해 gcc, heimda-dev, g++, libsasl2-dev를 먼저 설치해준다. (hdfs와 hive에 필요한 패키지들이다.) 그런 다음 다시 airflow 계정으로 돌아와 pip 명령을 통해 두 패키지를 설치하는 방식이다.

 

2) docker 빌드하기

 

Dockerfile이 있는 디렉토리에서 아래 명령어를 통해 docker 이미지를 빌드한다. 처음 빌드 시에는 다소 시간이 걸린다. 나 같은 경우는 약 7분 정도 걸렸다.

sudo docker build -t airflow_custom .

 

이후 아래 명령어를 통해 생성된 이미지를 확인할 수 있다. layer가 붙은 이미지의 경우 size도 증가한 것을 확인할 수 있다.

sudo docker image ls

>>>
REPOSITORY       TAG            IMAGE ID       CREATED              SIZE
airflow_custom   latest         29940f0d44c5   About a minute ago   1.79GB
apache/airflow   2.9.3          57b6604089c6   2 weeks ago          1.46GB
redis            7.2-bookworm   9c893be668ac   2 months ago         116MB
postgres         13             2cf221a08d3b   2 months ago         419MB
hello-world      latest         d2c94e258dcb   15 months ago        13.3kB

 

3) docker-compose.yaml 파일 수정

 

docker-compose.yaml 파일에 진입해 해당 부분을 고쳐준다.

x-airflow-common:
  &airflow-common
  image: ${AIRFLOW_IMAGE_NAME:-apache/airflow:2.9.3}
  environment:
  
>>>

x-airflow-common:
  &airflow-common
  image: airflow_custom
  environment:

 

4) Docker 재실행

# docker 종료
sudo docker compose down

# docker 시작
sudo docker compose up

 

 

Connection Type 추가 확인

 

이후 Webserver에 접속해 Connection Type이 추가되었는지 확인하면 된다.

HDFS와 Hive 관련 Connection Type이 추가된 것을 확인할 수 있다.

728x90
반응형

댓글