주니어 데이터 엔지니어 우솨's 개발일지

데이터 엔지니어링 46일차 TIL 본문

데브코스

데이터 엔지니어링 46일차 TIL

우솨 2024. 6. 5. 19:25

학습내용

Airflow Executor란?
- Executor는 Task들을 관리하고 실행하는 역할을 수행한다
    - 병렬 혹은 일렬 실행이나 어느 worker에서 실행할지 등
- 다양한 수의 Executor타입이 존재
    - Sequential Executor : 디폴트로 설치되며 Sqlite와 같은 싱글스레드 DB에서만 사용가능
    - Local Executor : task들을 Airflow 마스터 노드안에서 실행한다
    - Celery Executor : 다수의 Worker 노드가 있는 경우 사용되며 Celery 큐를 사용해 task들을 worker노드로 분산하여 실행한다.
    - Kubernetes Executor는 K8s 클러스터를 사용하여 task들을 독립된 환경에서 사용한다.


Airflow 아키텍쳐 : Docker와 K8s를 사용하는 방법
1. Airflow Operator로 KubernetesPodOperator를 사용
    - 특정 태스크를 Docker Image로 만들어 K8s에서 실행하는방법
2. Airflow Operator로 DockerOperator를 사용
    - 특정 태스크를 Docker Image로 만들어 Docker Container 위에서 실행하는 방법
3. Ariflow Executor로 다음중의 하나를 사용
    - KubernetesExecutor : 모든 DAG코드가 Docker Image로 빌드되어 K8s에서 실행됨
    - CeleryKubernetesExecutor : Airflow 로드가 전체적으로 큰데 소수의 task만 Isolation을 필요로 하는경우 사용하며 CeleryExecutor와 KubernetesExecutor를 동시에 사용하는 방법을 제공해주는 Executor이다
    - LocalKubernetesExecutor : LocalExecutor와 KubernetesExecutor를 동시에 사용하는 방법을 제공해주는 Executor이다

하이레벨 Docker 사용 프로세스
- 먼저 대상 소프트웨어를 선택
    - 다수의 컴포넌트로 구성되는 소프트웨어라면 각각이 Docker Iamge로 만들어져야할 수도 있다.
- 이를 Docker Image로 빌드한다(Dockerization)
    - Dockerfile이란 텍스트파일로 세부 정보를 기술 : 해당 소프트웨어를 이미지로 바꾸기 위한 Docker에게 주는 명령어들을 포함한다.
    - Docker Iamge : 하나의 Docker Container안에서 실행된다 : Dockerfile을 기준으로 만들어지며 소프트웨어를 실행하기위해 필요한 모든 것을 포함한다.




Docker Image의 구성요소
- 기본OS(ex. 우분투, 데비안)와 같은 소프트웨어의 실행환경
- 소프트웨어 자체(코드)
- 소프트웨어가 필요로하는 라이브러리
- 파일 시스템 스냅샷 : 스택화된 형태로 구현
- 환경 설정 변수 : 빌드할 때 변수와 실행 때 변수 두가지가 존재
- 메타 데이터 : 이미지 자체에 대한 정보(버전, 작성자 ,설명 등)
이러한 정보와 설치 관련 실행 순서등이 Dockerfile에 기술된다.

 

도커 이미지 생성

 

도커 이미지 확인


Docker Hub
- Docker Registry : Docker Image들의 보관소
    - On-perm registry와 Cloud registry가 존재
- 여기에 등록을 하면 회사내 혹은 퍼블릭하게 이미지를 공유할 수 있다.
- Teams & Organizations
- Public과 Private Repo 제공
- Official Images
- Github와 연동을 통한 Automated Build제공

 

도커 허브에 레포 생성



Dockerfile의 생성

FROM node:alpine
COPY ./app
WORKDIR /app
CMD node app.js



Dockerfile 사용가능 기타 키워드
- ARG : Docker Image를 만들 때 사용되는 변수지정, 최종이미지에는 들어가지 않는다
- ENV : 컨테이너가 실행될 때 사용되는 환경변수, 최종이미지에 저장됨
- USER : 컨테이너를 실행할 때 사용할 유저 ID
- EXPOSE : 서비스 사용 포트번호
- RUN : 빌드시 실행되어야하는 명령들이 지정됨(Docker build)
    - RUN apt-get update && apt-get install -y curl

CMD vs ENTRYPOINT
- Container가 시작할 때 실행되어야 하는 명령어를 지정하는데 사용한다(Docker run)
    - 굉장히 흡사한 기능을 제공하지만 우선 순위가 있다
- 둘다 한 Dockerfile에서 여러번 실행되면 각각 마지막 것만 사용됨
- ENTRYPOINT가 있으면 CMD값이 파라미터로 실행된다
=> 최대한 CMD만 사용하는게 좋다