๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Airflow

[Airflow] Airflow ๊ธฐ๋ณธ ๊ฐœ๋…

by forestlim 2021. 8. 14.
728x90
๋ฐ˜์‘ํ˜•

๐Ÿ“Œ Airflow๋ž€?

Python ์ฝ”๋“œ๋กœ ์›Œํฌํ”Œ๋กœ์šฐ(workflow)๋ฅผ ์ž‘์„ฑํ•˜๊ณ , ์Šค์ผ€์ฅด๋ง, ๋ชจ๋‹ˆํ„ฐ๋ง ํ•˜๋Š” ํ•˜๋‚˜์˜ ํ”Œ๋žซํผ์ด๋‹ค.. Airflow๋ฅผ ํ†ตํ•ด์„œ ๋ฐ์ดํ„ฐ์—”์ง€๋‹ˆ์–ด๋ง์˜ ETL(Extract, Transform, Load) ์ž‘์—…์„ ์ž๋™ํ™”ํ•˜๊ณ , DAG(Directed Acyclic Graph)์˜ ํ˜•ํƒœ์˜ ์›Œํฌํ”Œ๋กœ์šฐ ์ž‘์„ฑ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋” ์ •๊ตํ•œ dependcy๋ฅผ ๊ฐ€์ง„ ํŒŒ์ดํ”„๋ผ์ธ์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

 

๊ฐ„๋žตํ•˜๊ฒŒ Airflow๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์‚ดํŽด๋ณด์•˜๊ณ , Airflow๋ฅผ ๊ตฌ์„ฑํ•˜๊ณ  ์žˆ๋Š” ๊ตฌ์„ฑ์š”์†Œ๋“ค์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋„๋ก ํ•œ๋‹ค.

  • Scheduler - ๋ชจ๋“  DAG์™€ Task์— ๋Œ€ํ•˜์—ฌ ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ ๊ด€๋ฆฌํ•˜๊ณ  ์‹คํ–‰ํ•ด์•ผ ํ•  Task๋ฅผ ์Šค์ผ€์ค„๋กœ ๊ด€๋ฆฌ(๊ฐ task id๋Š” ๊ณ ์œ ํ•˜๋‹ค)
  • DAG - Directed Acyclic Graph๋กœ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ์ž‘์„ฑํ•œ ์›Œํฌํ”Œ๋กœ์šฐ. ํ•˜๋‚˜์˜ ํ”„๋กœ์ ํŠธ๋ผ๊ณ  ์ƒ๊ฐ(?)ํ•˜๋ฉด ๋  ๊ฒƒ ๊ฐ™๋‹ค. ๊ฐ Task๋“ค์˜ depency๋ฅผ ์ •์˜ํ•œ๋‹ค.
  • Web server - Airflow์˜ ์›น UI. UI๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž๋“ค์ด ํ˜„์žฌ ์ง„ํ–‰๋˜๊ณ  ์žˆ๋Š” ์ƒํ™ฉ์„ ์‹œ๊ฐ์ ์œผ๋กœ ๋ณผ ์ˆ˜ ์žˆ๊ฒŒ๋” ํ•œ๋‹ค.
  • Database - Airflow์— ์กด์žฌํ•˜๋Š” DAG์™€ Task ๋“ค์ด ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค
  • Worker - ์‹ค์ œ Task๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์ฃผ์ฒด. Executor ์ข…๋ฅ˜์— ๋”ฐ๋ผ ๋™์ž‘ ๋ฐฉ์‹ ๋‹ค์–‘ํ•˜๋‹ค.

ํ•œ๋งˆ๋””๋กœ ์ •์˜ํ•˜๋ฉด Airflow๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์ž‘์„ฑํ•œ Python DAG๋ฅผ ์ฝ๊ณ , ๊ฑฐ๊ธฐ์— ๋งž์ถฐ Scheduler๊ฐ€ Task๋ฅผ ์Šค์ผ€์ฅด๋งํ•˜๋ฉด, Worker๊ฐ€ Task๋ฅผ ๊ฐ€์ ธ๊ฐ€ ์‹คํ–‰ํ•œ๋‹ค. Task์˜ ์‹คํ–‰์ƒํƒœ๋Š” Database์— ์ €์žฅ๋˜๊ณ , ์‚ฌ์šฉ์ž๋Š” UI๋ฅผ ํ†ตํ•ด์„œ ๊ฐ Task์˜ ์‹คํ–‰ ์ƒํƒœ, ์„ฑ๊ณต ์—ฌ๋ถ€ ๋“ฑ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

 

Airflow๋ฅผ ์‹คํ–‰์‹œํ‚ค๋ฉด ์ด๋Ÿฐ ์›น UI๊ฐ€ ๋‚˜์˜จ๋‹ค. ์™ผ์ชฝ์— ๋ณด์ด๋Š” ๊ฒƒ๋“ค์ด DAG ์˜ˆ์‹œ๋“ค์ด๋‹ค. 


๐Ÿ“Œ DAG(Directed Acyclic Graph)

Airflow์˜ DAG๋Š” ์‹คํ–‰ํ•˜๊ณ  ์‹ถ์€ Task๋“ค์˜ ๊ด€๊ณ„์˜ dependcy๋ฅผ ํ‘œํ˜„ํ•˜๊ณ  ์žˆ๋Š” Task๋“ค์˜ ๋ชจ์Œ์ด๋‹ค.

 

์˜ˆ๋กœ ์ €๋… ์š”๋ฆฌ๋ฅผ ํ•ด๋ณธ๋‹ค๊ณ  ์ƒ๊ฐํ•ด๋ณด๊ฒ ๋‹ค.

 

1. ๋จผ์ €, ๋ฌด์—‡์„ ๋งŒ๋“ค์ง€ ๋ฉ”๋‰ด๋ฅผ ๊ณ ๋ฏผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. 

2. ๋งŒ๋“ค ๋ฉ”๋‰ด์— ๋Œ€ํ•œ ์žฌ๋ฃŒ๋ฅผ ์ค€๋น„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. 

3. ์žฌ๋ฃŒ๊ฐ€ ์—†๋‹ค๋ฉด ์‹œ์žฅ์ด๋‚˜ ๋งˆํŠธ์— ๊ฐ€์„œ ์žฌ๋ฃŒ๋ฅผ ์‚ฌ์™€์•ผ ํ•˜๊ณ 

4. ๊ทธ ๋‹ค์Œ ์š”๋ฆฌ๋ฅผ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. 

5. ์š”๋ฆฌ๋ฅผ ์ €๋…์‹œ๊ฐ„(ex 7:00PM) ์ „๊นŒ์ง€ ์ค€๋น„

 

์žฌ๋ฃŒ๊ฐ€ ์—†๋‹ค๋ฉด ์š”๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ด๋Š” ์ˆœ์ฐจ์ ์œผ๋กœ ์ด๋ฃจ์–ด์ง€๊ฒŒ ๋œ๋‹ค. ์ฆ‰, ์š”๋ฆฌํ•˜๋Š” ๊ฒƒ์€ ์žฌ๋ฃŒ์ค€๋น„์— ๋Œ€ํ•ด

Dependcy๋ฅผ ๊ฐ–๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

 

์ฆ‰, DAG๋Š” ์–ด๋–ค ์ˆœ์„œ์™€ ์–ด๋–ค dependcy๋กœ ์‹คํ–‰ํ•  ์ง€ ์–ด๋–ค ์Šค์ผ€์ฅด๋กœ ์‹คํ–‰ํ•  ์ง€ ๋“ฑ์˜ ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. DAG๋ฅผ ์ •ํ™•ํ•˜๊ฒŒ ์ •์˜ํ•˜๊ณ  ์„ค์ •ํ•ด์•ผ ์›ํ•˜๋Š” Task๋“ค์„ ์Šค์ผ€์ฅด์— ๋งž๊ฒŒ ์ •ํ™•ํ•˜๊ฒŒ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.


๐Ÿ“Œ Opertor

์ด์ฒ˜๋Ÿผ ํ•˜๋‚˜์˜ DAG๋Š” ์—ฌ๋Ÿฌ๊ฐœ์˜ task๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด task๋ฅผ ์ด๋ฃจ๋Š” ๊ฒƒ์ด operator๋‚˜ sensor ์ด๋‹ค. Airflow๋Š” ๊ธฐ๋ณธ์ ์ธ Task๋ฅผ ์œ„ํ•ด ๋‹ค์–‘ํ•œ operator๋ฅผ ์ œ๊ณตํ•˜๋Š”๋ฐ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณตํ•˜๋Š” operator์—๋Š” ์ด๋Ÿฐ๊ฒƒ๋“ค์ด ์žˆ๋‹ค.

  • BashOperator : bash command๋ฅผ ์‹คํ–‰
  • PythonOperator : python ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰
  • EmailOperator : email์„ ๋ฐœ์†ก
  • MySqlOperator : sql์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰
  • Sensor : ์‹œ๊ฐ„, ํŒŒ์ผ, db, row๋“ฑ๋“ฑ์„ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์„ผ์„œ

๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณตํ•˜๋Š” Operator ์ด์™ธ์—๋„ ์ˆ˜๋งŽ์€ Operator๋“ค์ด ์กด์žฌํ•œ๋‹ค. ๋ฐ‘์— ์‚ฌ์ดํŠธ๋ฅผ ์ฐธ๊ณ ํ•˜๋ฉด ๋‹ค์–‘ํ•œ

Operator๋“ค์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

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

 

airflow.operators — Airflow Documentation

 

airflow.apache.org

 

Airflow์—์„œ ๋˜ํ•˜๋‚˜์˜ ์ค‘์š”ํ•œ ๊ฐœ๋…์ธ Scheduler์— ๋Œ€ํ•œ ์„ค์ •์€ ์ด๊ณณ์— ์ •๋ฆฌํ–ˆ๋‹ค.

https://amazelimi.tistory.com/28

 

[Airflow] Datetime (feat. ์ž๋™์‹คํ–‰ ๋ฐฉ์ง€)

๐Ÿ“Œ Airflow ์‹คํ–‰๋‚ ์งœ ์‹คํ–‰ ๋‚ ์งœ๋Š” batch job ์˜ ํŠน์„ฑ์„ ๊ฐ€์ง„ Airflow์—์„œ ๋งค์šฐ ์ค‘์š”ํ•˜๋‹ค. Airflow์—์„œ start_date ๋Š” ์‹คํ–‰ ์‹œ์ž‘ ๋‚ ์งœ๊ฐ€ ์•„๋‹ˆ๋ผ ์Šค์ผ€์ค„์ด ์‹œ์ž‘๋˜๋Š” ๋‚ ์งœ๋ผ๋Š” ๊ฒƒ์„ ๊ธฐ์–ตํ•ด์•ผํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด์„œ

amazelimi.tistory.com

 

728x90
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€