일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 레드시프트
- spark streaming
- MySQL
- 데이터
- Redshift
- docker
- 스파크 스트리밍
- 스파크
- Data engineering
- 카프카 구축
- 에어플로우
- Parquet
- spark
- 카프카
- 컬럼 기반
- kafka
- Zookeeper
- 대용량 처리
- Data Engineer
- AWS
- Schema Registry
- delta lake
- 델타레이크
- s3
- Data Warehouse
- kafka rest api
- airflow
- 데이터 엔지니어
- 데이터 엔지니어링
- 데이터 웨어하우스
- Today
- Total
데이터 엔지니어 기술 블로그
[Airflow] Airflow + Celery Executor 구축(Docker) 본문
개요
에어플로우를 LocalExecutor를 사용해서 하나의 인스턴스에 실행시키고 있었다. 그러나 인스턴스에 문제가 생기면 Airflow도 동작하지 않을 수 있는 문제가 있고, 인프라가 커졌을 때 확장이 힘들어서 Worker를 분리해야했다.
airflow에서 공식적으로 제공하는 docker-compose에서는 celery를 사용하며, 보통 airflow를 구축할 때 celery를 사용하는 것 같다.
이렇게 클러스터로 구축을 하게 되면 리소스가 필요할 때 worker의 갯수만 늘리면 되고, 리소스가 필요 없을 때 불필요하게 낭비하지 않고 worker의 갯수를 줄이면 되기 때문에 좋다.
구축할 때는 AWS ECS, AWS EFS 환경에서 구축했다.
구축 과정
Dask Cluster를 활용하여 구축 시도
가장 간단하게 Dask를 사용하여 구축하려고 했다.
- Dask는 pandas, numpy를 분산컴퓨터에서 처리할 수 있게 해주는 기능을 가지고 있다.
- Dask를 Jupyter Notebook에서 활용할 수 있는지 확인해보았다. 그러나 버전이 맞지 않아 동작하지 않았다.
Airflow와 Worker가 통신을 제대로 하지 못하는 이슈가 발생했다. 찾아보니 사람들이 현재 잘 사용하지 않아서 이슈가 발생해도 업데이트가 안되는 것 같다. 만약에 발생한 문제를 해결한다고 해도 또 다른 이슈가 생겼을 때 해결하기 힘들 것 같아서, 대중적인 방법을 사용하기로 결정했다.
Celery를 활용하여 구축
Airflow sample docker-compose에서 Celery를 활용하여 구축한 예시가 있었다. 그래서 이 docker-compose를 기반으로 시도했으나, 커스텀하는 부분에서 제한이 되외서 Airflow 이미지를 직접 만들어서 사용했다.
최종적으로 아래의 서비스로 분류하여 구축했다.
- mysql: mysql
- redis: redis
- airflow: airflow-scheduler, airflow-webserver, flower
- airflow worker: airflow-worker
발생했던 문제
Docker CMD 명령어 이해 못하는 문제
CannotStartContainerError: ResourceInitializationError: failed to create new container runtime task: OCI runtime create failed: container_linux.go:380: starting container process caused: exec: "/bin/bash -c": stat /bin/bash -c: no such file or directo....
- ["airflow worker"] 와 같은 방식으로 사용하면 하나의 명령어인 줄 알고 이해하지 못한다. ["airflow", "worker"] 와 같이 사용해야 한다.
redis, celery 버전 문제
pip3 install apache-airflow[celery]==2.1.2
pip3 install apache-airflow[redis]==2.1.2
- redis, celery도 마찬가지로 설치시에 버전까지 명시해주어야한다.
db init 사용 시 계정이 사라지는 문제
- db init 명령어를 사용했을 때 기존에 DB에 데이터가 있다면 기존에 있던 데이터가 날아간다.
ERROR: Pidfile (/opt/airflow/airflow-worker.pid) already exists.
- Docker로 각자 실행하는데 같은 airflow-worker.pid 파일을 바라보기 때문에 생기는 문제이다. dags, logs, plugins만 따로 마운트하도록 변경해서 해결했다.
'데이터 엔지니어링' 카테고리의 다른 글
[🔥Spark] Spark Streaming + Kafka 연동하기 (0) | 2021.10.29 |
---|---|
[🔥Spark] 스파크 AccessControlException: Permission denied 해결방법 (0) | 2021.10.29 |
[🧙Kafka] Confluent License (0) | 2021.10.14 |
[Redshift] Federated Query(연합 쿼리)란? (0) | 2021.10.14 |
[⚡AWS] Redshift 기초 이해하기 (0) | 2021.10.12 |