[Airflow] Airflow ๊ธฐ์ดˆ ์ง€์‹

2022. 9. 15. 19:28ใ†๐Ÿ›  Data Engineering/Apache Airflow

 

 

 

 

 

 

 

Airflow๋ž€?

์ž‘์—… ์Šค์ผ€์ค„๋Ÿฌ.

Airflow๋ฅผ ์ด์šฉํ•˜๋ฉด ์›ํ•˜๋Š” ์‹œ๊ฐ„์—, ์›ํ•˜๋Š” ์ž‘์—…์„ ์‹คํ–‰์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„  Airlfow์˜ ๊ธฐ์ดˆ ์ง€์‹์„ ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

 

๋ชฉ์ฐจ

๐Ÿ“ƒ Airflow ๊ธฐ์› ๋ฐ ์žฅ์ 

๐Ÿ“ƒ Airflow ๊ตฌ์กฐ

 

 

 

Airflow ๊ธฐ์› ๋ฐ ์žฅ์ 

 

๐Ÿ“Œ ๊ธฐ์›

Airflow๋Š” ์—์–ด๋น„์•ค๋น„์—์„œ ๊ฐœ๋ฐœํ•œ ์›Œํฌํ”Œ๋กœ์šฐ ์Šค์ผ€์ค„๋ง, ๋ชจ๋‹ˆํ„ฐ๋ง ํ”Œ๋žซํผ์ž…๋‹ˆ๋‹ค.

2016๋…„ ์•„ํŒŒ์น˜ ์žฌ๋‹จ์˜ incubator program์œผ๋กœ ํƒ„์ƒํ–ˆ์œผ๋ฉฐ, ํ˜„์žฌ๋Š” ์•„ํŒŒ์น˜ ํƒ‘ ๋ ˆ๋ฒจ ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค.

 Airbnb, Yahoo, Paypal, Intel, Stripe ๋“ฑ์—์„œ Airflow๋ฅผ ํ™œ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

 

๐Ÿ“Œ ๊ธฐ์กด ๋ฐฉ์‹์˜ ๋ฌธ์ œ์ 

 

๊ธฐ์กด์—” ํ•˜๋‚˜์˜ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋ชจ๋“  Task๋ฅผ ์ง‘์–ด๋„ฃ๊ณ  ์‹คํ–‰์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.

pipeline์„ ํ•œ ๋ฒˆ์— ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ˜น์€ Task๋ฅผ ๋”ฐ๋กœ ์ •์˜ํ•ด์„œ ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ตฌ์ถ•ํ•˜์—ฌ๋„, ์‹คํ–‰'๋งŒ' ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฌธ์ œ๋“ค์„ ๋‚ณ์•˜์Šต๋‹ˆ๋‹ค. 

 

 

1. (๋ชจ๋‹ˆํ„ฐ๋ง ๋ฌธ์ œ) ์ž˜ ๋Œ์•„๊ฐ€๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ํž˜๋“ญ๋‹ˆ๋‹ค.

2. (์˜์กด์„ฑ ๊ด€๋ฆฌ) ๋ฐ์ดํ„ฐ ํŒŒ์ดํ”„๋ผ์ธ ๊ฐ„ ์˜์กด์„ฑ์ด ์žˆ๋Š” ๊ฒฝ์šฐ, ์•ž์„  ํŒŒ์ดํ”„๋ผ์ธ์ด ์ž˜ ๋Œ์•„๊ฐ€๊ณ  ์žˆ๋Š”์ง€ ํŒŒ์•…ํ•˜๊ธฐ ํž˜๋“ญ๋‹ˆ๋‹ค.

3. (๋ฐฐํฌ) ์ƒˆ๋กœ์šด ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๋ฐฐํฌํ•˜๊ธฐ ํž˜๋“ญ๋‹ˆ๋‹ค. ์˜ค๋ฅ˜๊ฐ€ ๋‚  ๊ฒฝ์šฐ, '์ „์ฒด' ํ”Œ๋กœ์šฐ๋ฅผ ๋‹ค์‹œ ๋ฐฐํฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

4. (์‹คํŒจ ๋ณต๊ตฌ) ์‹คํŒจํ•  ๊ฒฝ์šฐ, ์–ธ์ œ ์–ด๋–ป๊ฒŒ ๋‹ค์‹œ ์‹คํ–‰ํ•  ๊ฒƒ์ธ๊ฐ€์— ๋Œ€ํ•œ ํ•ด๊ฒฐ์ฑ…์ด ์—†์Šต๋‹ˆ๋‹ค.

5. (ํ™•์žฅ์„ฑ) ์ค‘์•™๊ด€๋ฆฌ ํˆด์ด ์—†๊ธฐ ๋•Œ๋ฌธ์—, ๋ถ„์‚ฐ๋œ ํ™˜๊ฒฝ์—์„œ ํŒŒ์ดํ”„๋ผ์ธ ๊ด€๋ฆฌ๊ฐ€ ํž˜๋“ญ๋‹ˆ๋‹ค.

 

 

 

 

๐Ÿ“Œ ์žฅ์ 

 

1. Airflow๋Š” UI(user interface)๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ, ์•ˆ์—์„œ ๋ชจ๋‹ˆํ„ฐ๋ง๊ณผ ์ค‘์•™ ๊ด€๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์ด์— ๋”ฐ๋ผ ๊ธฐ์กด ๋ฌธ์ œ์ธ ๋ชจ๋‹ˆํ„ฐ๋ง, ํ™•์žฅ์„ฑ, ์˜์กด์„ฑ ๊ด€๋ฆฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

2. Airflow๋Š” ํ•˜๋‚˜์˜ DAG ์•ˆ์— ํŒŒ์ดํ”„๋ผ์ธ์ด ๊ตฌ์ถ•๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ํ•œ ๊ณณ์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋‚˜๋„, ๊ทธ ๋ถ€๋ถ„๋งŒ ๊ณ ์ณ์„œ ๋‹ค์‹œ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‰ฝ๊ฒŒ ๋ฐฐํฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ณ , ์˜ค๋ฅ˜๊ฐ€ ๋‚˜๋„ ์žฌ๋นจ๋ฆฌ ๊ณ ์ณ์„œ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. 

3. Python ์–ธ์–ด๋กœ ์งœ๊ธฐ ๋•Œ๋ฌธ์—, ๋ฌธ๋ฒ•๊ณผ ํ™œ์šฉ์ด ์‰ฝ์Šต๋‹ˆ๋‹ค.

4. Backfill ๊ธฐ๋Šฅ์ด ์žˆ์–ด, ์˜ค๋ฅ˜๊ฐ€ ๋‚˜๋„ ์–ธ์ œ, ์–ด๋–ป๊ฒŒ ๋‹ค์‹œ ์‹คํ–‰ํ•  ๊ฒƒ์ธ์ง€ ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

5. Bottle Neck์„ ๋น ๋ฅด๊ฒŒ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

6. GCP ์—ฐ๋™์ด ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

 

 

 

 

Airflow ๊ตฌ์กฐ

 

๐Ÿ“Œ ์ „์ฒด ๊ตฌ์กฐ๋„

 

Airflow์˜ ์ „์ฒด ๊ตฌ์กฐ๋„๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

Scheduler, Executor, Worker, Web Server, Metastore, Dags ๋“ฑ์ด ๊ตฌ์„ฑ์š”์†Œ์ž…๋‹ˆ๋‹ค. 

 

 

 

ํ•œ ๊ฐœ์˜ DAG๋Š” ํ•˜๋‚˜์˜ pipeline์ž…๋‹ˆ๋‹ค.

 

๐Ÿ“Œ Functions

 

Airflow Webserver

Airflow์˜ ๋กœ๊ทธ, ์›Œํฌ ํ”Œ๋กœ์šฐ, ์ง„ํ–‰ ์ƒํ™ฉ ๋“ฑ ์ „์ฒด์ ์ธ ๋ชจ๋‹ˆํ„ฐ๋ง์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ํŠนํžˆ Task ์ƒํƒœ, Dag ๋ชฉ๋ก ๋“ฑ์„ ์‹œ๊ฐํ™”ํ•˜์—ฌ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. UI๋ฅผ ํ†ตํ•ด ์‹œ๊ฐ์ ์œผ๋กœ ์ค‘์•™ ๊ด€๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. 

 

Airflow DAGs Folder

์œ ์ €๊ฐ€ ์ž‘์„ฑํ•œ DAG๋“ค์„ ์ €์žฅํ•ด๋‘๋Š” ํด๋”์ž…๋‹ˆ๋‹ค. ์ด๊ณณ์„ ์ฐธ๊ณ ํ•˜์—ฌ Web Server์™€ Scheduler๊ฐ€ ์—…๋ฐ์ดํŠธ๋ฉ๋‹ˆ๋‹ค.

 

Airflow Scheduler

Airflow๋กœ ํ• ๋‹น๋œ work๋ฅผ ์Šค์ผ€์ฅด๋งํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ์ž…๋‹ˆ๋‹ค. work๋ฅผ ์‹œ์ž‘ํ•˜๊ณ , Executor์—๊ฒŒ task๋ฅผ ์ œ๊ณตํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. 

 

Airflow Executor

Scheduler์—๊ฒŒ ๋ฐ›์€ Task๋ฅผ ํ•ธ๋“ค๋งํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ์ž…๋‹ˆ๋‹ค. ์–ด๋–ป๊ฒŒ ์‹คํ–‰๋˜๋Š”์ง€ ์ •์˜ํ•˜๋Š” ๊ณณ์ž…๋‹ˆ๋‹ค. default ์„ค์น˜ ์‹œ์—๋Š” Scheduler์— ์žˆ๋Š” ๋ชจ๋“  ๊ฒƒ๋“ค์„ ๋‹ค ์‹คํ–‰์‹œํ‚ค์ง€๋งŒ, production ์ˆ˜์ค€์—์„œ์˜ Executor๋Š” worker์—๊ฒŒ task๋ฅผ push ํ•ฉ๋‹ˆ๋‹ค.

 

Airflow Worker

์‹ค์ œ task๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์ฃผ์ฒด์ž์ž…๋‹ˆ๋‹ค.

 

Airflow Metastore

Dag์˜ ์ •๋ณด/์ƒํƒœ ๋“ฑ์˜ ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ, Task Instance ๋“ฑ์„ ์ €์žฅํ•ด๋‘๋Š” ์ €์žฅ์†Œ์ž…๋‹ˆ๋‹ค. ๋ชจ๋“  ์—…๋ฐ์ดํ„ฐ์™€ ์ง„ํ–‰์€ Metastore๋ฅผ ๊ฑฐ์นฉ๋‹ˆ๋‹ค. 

 

 

 

 

 

[์›Œํฌ ํ”Œ๋กœ์šฐ ์ƒ์„ฑ๊ณผ ์‹คํ–‰]

 

 

 

1. ์œ ์ €๊ฐ€ ์ƒˆ๋กœ์šด DAG๋ฅผ ์ž‘์„ฑํ•˜๊ณ , DAGs ํด๋” ์•ˆ์— ๋ฐฐ์น˜

2. Web Server, Scheduler๊ฐ€ DAG๋ฅผ ํŒŒ์‹ฑ (์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค).

3. Scheduler๊ฐ€ Metastore์— DagRun object๋ฅผ ์ƒ์„ฑ. DagRun = ์ž‘์„ฑํ•œ DAG์˜ ๊ฐ์ฒด, ํ˜„์žฌ ์ง„ํ–‰ ์ƒํ™ฉ์„ ์•Œ๋ ค์ค€๋‹ค. 

DagRun status:Running

4. Task Instance๋ฅผ Scheduler๊ฐ€ ์Šค์ผ€์ฅด๋งํ•œ ํ›„, Executor๋กœ ๋ณด๋‚ธ๋‹ค.

5. ์™„๋ฃŒ ํ›„, Executor๋Š” Metastore์— ์™„๋ฃŒ ๋ณด๊ณ , DagRun status:Completed 

6. Scheduler, Web Server๊ฐ€ ๊ฐ๊ฐ ํ™•์ธ. Scheduler๋Š” ๋‹ค์Œ Task๋ฅผ ์ง„ํ–‰ํ•˜๊ณ , Web Server๋Š” UI ์—…๋ฐ์ดํŠธ.

 

 

 

 

 

 

๐Ÿ“Œ DAG (Directed Acyclic Graph)

 

 

 

Directed Acyclic Graph

๋น„์ˆœํ™˜ ๊ทธ๋ž˜ํ”„. ๋…ธ๋“œ์™€ ๋…ธ๋“œ๊ฐ€ ๋‹จ๋ฐฉํ–ฅ์œผ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์–ด, ๋‹ค์‹œ ๋Œ์•„์˜ค์ง€ ์•Š๋Š”๋‹ค๋Š” ํŠน์„ฑ์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค. Airflow๋Š” ์ด๋Ÿฐ DAG ํŠน์„ฑ์„ ์ด์šฉํ•˜์—ฌ Workflow๋ฅผ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. 

 

 

 

๐Ÿ“Œ Operator

 

DAG ์•ˆ์˜ ์ž‘์—…์„ ์ •์˜ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. 

 

1. Action Operators

์‹ค์ œ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

 

2. Transfer Operators

๋ฐ์ดํ„ฐ๋ฅผ ์˜ฎ๊ธฐ๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

 

3. Sensor Operators

ํŠน์ • ์กฐ๊ฑด์„ ๋งŒ์กฑํ–ˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์กฐ๊ฑด์„ ๋งŒ์กฑํ•  ๊ฒฝ์šฐ, ๋‹ค์Œ Step์œผ๋กœ ๋„˜์–ด๊ฐ€๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

 

 

 

 

 

 

์ง€๊ธˆ๊นŒ์ง€ Airflow์˜ ๊ธฐ์ดˆ ์ง€์‹์„ ์•Œ์•„๋ดค์Šต๋‹ˆ๋‹ค.

Airflow์˜ ํ๋ฆ„๊ณผ ๊ฐœ๋…์„ ์ž˜ ์ˆ™์ง€ํ•˜์…จ๋‹ค๋ฉด ์ด์ œ ํ™œ์šฉํ•  ์ฐจ๋ก€์ž…๋‹ˆ๋‹ค.

๋‹ค์Œ ํฌ์ŠคํŒ…์—์„  Airflow์™€ Spark๋ฅผ ํ•จ๊ป˜ ํ™œ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.