
ํ์๋ ๊ฐ์ธ ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉฐ, Airflow๋ฅผ ํตํ ์ํฌํ๋ก์ฐ ์๋ํ๋ฅผ ๊ตฌ์ถํ๋ค.
https://github.com/DeepFlame-JR/Stock_and_Forum
GitHub - DeepFlame-JR/Stock_and_Forum: ์ฃผ์ ๊ฐ๊ฒฉ๊ณผ ๋ค์ด๋ฒ ์ข ๋ชฉํ ๋ก ๋ฐฉ์ ๋ด์ฉ์ ์๊ฐ๋ณ๋ก ์์ง
์ฃผ์ ๊ฐ๊ฒฉ๊ณผ ๋ค์ด๋ฒ ์ข ๋ชฉํ ๋ก ๋ฐฉ์ ๋ด์ฉ์ ์๊ฐ๋ณ๋ก ์์ง. Contribute to DeepFlame-JR/Stock_and_Forum development by creating an account on GitHub.
github.com
์ด๋ ๋ , ๋ชจ๋ ์์
์ ์ํํ Task๊ฐ ๊ณ์ Running ์ํ๋ก ๋จ์์์๋ค.
๊ตฌ๊ธ๋ง์ ํด๋ณด๋, ํ ์์
์์ ๋ง์ ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ฉด ์์ ๊ฐ์ด ๋๋ ๋ฒ๊ทธ๊ฐ ์๋ ๊ฒ์ ํ์ธํ๋ค.
ํ Task์์ ๊ฝค ๋ง์ ์์ ์ ํ๊ธฐ ๋๋ฌธ์..... ๊ฐ์ ์ด ํ์ํ๋ค๊ณ ์๊ฐ๋์๋ค.... ๐
๊ทธ๋์ ํ ๊ฐ์ง ์์ ์ ๋๋๋ ์์ ์ ๋จผ์ ์งํํ๋ค.
1. Task ์์ ๋ถ์ฐ
Airflow์์๋ ๋ค์ํ Operator๊ฐ ์๋ค. ์ด๊ฒ์ ํตํด ๋จ์ผ ์์
์ ์ํํ ์ ์๋ค.
๊ทธ ์ข
๋ฅ๊ฐ ๋ค์ํ๋ฐ, ์๋ ๋งํฌ์์ ํ์ธ๊ฐ๋ฅํ๋ค.
https://airflow.apache.org/docs/apache-airflow/stable/_api/airflow/operators/index.html
airflow.operators — Airflow Documentation
airflow.apache.org
์ด์ค ๊ฐ์ฅ ๋ํ์ ์ธ BashOperator์ PythonOperator๋ฅผ ์ดํด๋ณด์.
- BashOperator: Bash Shell ๋ช ๋ น์ด๋ฅผ ์คํํ๋ค.
- PythonOperator: ์ ์๋ Python ํจ์๋ฅผ ์คํํ๋ค.
๊ธฐ์กด์๋ BashOperator๋ฅผ ํตํด์ ์์ ์ ์คํํ๋ค.
forum = BashOperator(task_id='get_forum',
bash_command='python3 %s/data/forum.py' % src_folder,
dag=dag)
ํ์ง๋ง ๊ฐ์ ์์ ์ ์ฌ๋ฌ ๊ฐ์ ์์ ์ผ๋ก ๋๋๋ ๊ณผ์ ์ด ํ์ํ๊ณ , ์ด๋ฅผ ์ํด ๋งค๊ฐ๋ณ์๋ฅผ ์ ๋ฌํ๋ PythonOperator๋ก ์์ ํ๋ค.
op_kwags๋ฅผ ํตํด์ ๋งค๊ฐ๋ณ์๋ฅผ ์ ๋ฌํ ์ ์๋ค. (start, end, port)
def execute_forum(start, end, port, **kwargs):
from data import forum
forum.main_get_forum(start, end, port)
forum_tasks = {}
for i, f in enumerate(["f1", "f2", "f3", "f4", "f5"]):
task = PythonOperator(
task_id=f"forum_{i+1}",
python_callable=execute_forum,
op_kwargs={"start":i*11, "end":min(50,(i+1)*11), "port":4444+i},
dag=dag,
)
forum_tasks[f] = task
forum_tasks["f1"] >> forum_tasks["f2"] >> forum_tasks["f3"] >> forum_tasks["f4"] >> forum_tasks["f5"]
์์ฑ๋ DAG๋ ์๋์ ๊ฐ๋ค. ์ด๋ ๊ฒ task๋ฅผ ์ฌ๋ฌ ๊ฐ๋ก ๋๋๋ ์์ ์ ์๋ฃํ๋ค.

๐ค ๊ทธ๋ฐ๋ฐ... ํด๋น ์์ ์ ๋น๋๊ธฐ๋ก ์ฒ๋ฆฌํด๋ ๋๋ ์์ ์ด๊ธฐ ๋๋ฌธ์ ์ด๋ ๊ฒ ์์ ์ ๋ฐฐ์นํ๋ฉด ์๋นํ ๋นํจ์จ์ ์ด๋ค. (์ด 1์๊ฐ ์ ๋์ ์๊ฐ์ด ์์๋์๋ค.)
๋ฐ๋ผ์ ์์ ์ ๋ณ๋ ฌ ์ฒ๋ฆฌํด๋ณด๊ธฐ๋ก ํ๋ค!
2. Docker๋ฅผ ํตํ Celery Executor ๊ตฌ์ถ
Airflow๋ ๋ค์ํ Executor๋ฅผ ์ ๊ณตํ๋ค.
- Sequential Executor
Airflow์์ ์ ๊ณต๋๋ ๊ธฐ๋ณธ Executor๋ก ํ๋ฒ์ ํ๋์ ์์ ๋ง ์คํํ ์ ์๋ค. - Local Executor
Sequential Executor์ ๋ฌ๋ฆฌ task๋ฅผ ๋ณ๋ ฌ๋ก ์คํํ๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ค. - Celery Executor
Local Executor์ ๊ฐ์ด task๋ฅผ ๋ณ๋ ฌ๋ก ์คํํ ์ ์๋ค. Celery๋ ์ถ๊ฐ์ ์ผ๋ก Redis์ ๊ฐ์ Message Queue๋ฅผ ํ์๋ก ํ๋๋ฐ, ์ด๋ Executor๊ฐ ํด๋ฌ์คํฐ ํ์์ผ๋ก ๊ตฌ์ฑ๋๊ณ , Message Queue์ ์๋ task๋ฅผ ์คํํ๋ ๊ตฌ์กฐ๋ก ๋์ํ๊ธฐ ๋๋ฌธ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ํด๋ฌ์คํฐ๋ก ๊ตฌ์ฑ๋์๊ธฐ ๋๋ฌธ์ Executor์ ๋ํ High Availability ๊ตฌ์ฑ๊ณผ Scale out์ด ์์ฐ์ค๋ฝ๊ฒ ๊ฐ๋ฅํ๋ค.
๋ฐ๋ผ์ ์ค์ ์ด์ํ๊ฒฝ์ ์ ํฉํ๋ค๊ณ ํ๋จ๋๋ค.
ํ์์ ๊ฒฝ์ฐ, ๋ณ๋ ฌ ์ฒ๋ฆฌ์ worker ์ ์ฆ๊ฐ๋ฅผ ํตํ ์๊ฐ ๋จ์ถ์ ์ํด Celery Executor๋ฅผ ๊ตฌ์ถํ๋ค.
๋ํ Airflow ๊ตฌ์ถ์ ์ํด Airflow์์ ์ ๊ณต๋๋ docker-compose ํ์ผ์ ํ์ฉํ์ฌ ํ๊ฒฝ์ ๊ตฌ์ถํ๋ค.
docker์ docker-compose ํ์ผ๋ฅผ ํ์ฉํ๋ฉด ์๋์ ๊ฐ์ ์ฅ์ ์ด ์๋ค.
- ์คํํ๊ฒฝ ๊ตฌ์ถ์ด ๊ฐ๋จํ๋ค.
- Host์ ๋ ๋ฆฝ๋ ํ๊ฒฝ์ ์ค์น๋จ์ผ๋ก ์ถฉ๋์ ๋ฐฉ์งํ ์ ์๊ณ , ์ฝ๊ฒ ์ฒ์๋ถํฐ ๋ค์ ํ๊ฒฝ์ ๊ตฌ์ถํ ์ ์๋ค.
- Celery Executor ๊ตฌ์ถ์ ์ํด webserver, scheduler, worker ๋ฑ ๋ง์ ์ปจํ ์ด๋ ๊ตฌ์ถ์ด ํ์ํ๋ค. ์ด๋ฌํ ๊ณผ์ ์ docker-compose.yaml์ ์ ์ํ์ฌ ํ ๋ฒ์ ํด๊ฒฐํ ์ ์๋ค. ๋ํ ์ปจํ ์ด๋๋ค์ ์ค์ ๊ฐ๊ณผ ์์กด์ฑ์ ์ ์ํ ์ ์๋ค.
Airflow์์ ๊ณต์์ ์ผ๋ก ๋์์๋ ๋ฌธ์์์ docker-compose.yaml ํ์ผ๊ณผ ๋ช ๋ น์ด๋ฅผ ํ์ธํ ์ ์๋ค.
https://airflow.apache.org/docs/apache-airflow/stable/start/docker.html
Running Airflow in Docker — Airflow Documentation
airflow.apache.org
๐ค ๊ทธ๋ฐ๋ฐ.... ํ์์ ์ฝ๋๋ฅผ ์คํํ๊ธฐ ์ํด์๋ pip๋ก ์ค์นํด์ผํ๋ ํจํค์ง๋ ๋ง๊ณ ,,,, Spark ์คํ์ ์ํด JAVA ํ๊ฒฝ ์ค์ ๋ ํ์ํ๋ค.... ๊ทธ๋์ ๊ธฐ๋ณธ docker-compose.yaml ๋ด์ฉ์์ ํ๋์ด ํ์๊ฐ ์์๋ค.
ํ์๊ฐ ํ์ฉํ๋ Docker ๊ตฌ์ถ ํ๊ฒฝ์ ๊ณต์ ํ๊ณ ์ ํ๋ค.
1. docker-compose.yaml
2. Dockerfile
์์์ build ์์น์ ์์ฑํ๋ค. ์ปจํ ์ด๋ ๊ตฌ์ถ ์, ์คํํ ์ฝ๋๋ฅผ ์ ์ํ๋ค.
requirements.txt๋ ์๋์ ๊ฐ์ด ์์ฑํ์ฌ docker-compose.yaml๊ณผ ๊ฐ์ ํด๋์ ์์น์ํค๋ฉด ๋๋ค.
pandas==1.3.5
selenium
selenium-requests
bs4
webdriver-manager
pymongo
psycopg2
pyspark
pyhive
thrift
thrift-sasl
sasl
konlpy
3. Docker ๋น๋
๊ทธ ํ, Docker ํ๊ฒฝ์ ๊ตฌ์ถํ๊ณ ์ถ๋ค๋ฉด ์๋ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ๋ค.
docker-compose up -d --scale airflow-worker=n --build
// -d: docker ๊ตฌ์ถ์ด ๋ฐฑ๊ทธ๋ผ์ด๋๋ก ์คํ๋๋ค.
// --scale: ํน์ image๋ฅผ n๊ฐ ์์ฑํ๋ค.
// --build: ์บ์ฑ๋ ์ด๋ฏธ์ง๋ฅผ ์ฒดํฌํ์ง ์๊ณ , ๋ฌด์กฐ๊ฑด ๋น๋๋ฅผ ํ๊ณ ์์ํ๋ค.
์ต์ข ์ ์ผ๋ก ์์ฑ๋ DAG๋ ์๋์ ๊ฐ์ผ๋ฉฐ, ๊ธฐ์กด์ 1์๊ฐ ๊ฑธ๋ฆฌ๋ ์์ ์ด 30๋ถ์ผ๋ก ๋จ์ถ๋์๋ค. ๐ช

์ฐธ๊ณ
https://umbum.dev/779
https://dydwnsekd.tistory.com/98
โ