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

Apache Spark

[Infra] ๋ฐ์ดํ„ฐ ์ธํ”„๋ผ - Ingestion&Transformation

๋ฐ˜์‘ํ˜•

๐Ÿ”Š ํ•ด๋‹น ํฌ์ŠคํŒ…์€ YouTube GeekNews ์ฑ„๋„์˜ ๋ฐ์ดํ„ฐ ์ธํ”„๋ผ ๊ฐ•์˜ ๋‚ด์šฉ์— ๊ธฐ๋ฐ˜ํ•ด ์ œ๊ฐ€ ์žฌ๊ตฌ์„ฑํ•˜์—ฌ ์ž‘์„ฑํ•จ์„ ์•Œ๋ ค๋“œ๋ฆฝ๋‹ˆ๋‹ค.

 

์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ์ €๋ฒˆ ํฌ์ŠคํŒ…์—์„œ ์•Œ์•„๋ณธ ๋ฐ์ดํ„ฐ ์ธํ”„๋ผ ๊ตฌ์กฐ์˜ ์ฒซ ๋ฒˆ์งธ ๊ตฌ์„ฑ์š”์†Œ Sources์— ์ด์–ด ๋‹ค์Œ ๋‹จ๊ณ„์ธ Ingestion & Transformation์„ ์•Œ์•„๋ณด๋ ค ํ•œ๋‹ค.

 

๋ฐ์ดํ„ฐ ์ธํ”„๋ผ์˜ ํฐ ๊ตฌ์กฐ

Ingestion & Transformation

ํ”ํžˆ ๋งํ•˜๋Š” ETL ๋„๊ตฌ๋“ค์ด ์ด๋ฒˆ ๋‹จ๊ณ„์— ํ•ด๋‹นํ•˜๋Š” ๊ฒƒ๋“ค์ด๋‹ค. ์ฆ‰, Sources ๋กœ๋ถ€ํ„ฐ ์–ป์€ ๋งŽ์€ ๋ฐ์ดํ„ฐ๋“ค์„ ์ถ”์ถœ, ๋ณ€ํ™˜ํ•˜๋Š” ๋‹จ๊ณ„์ด๋‹ค. ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ์œ„ ๊ทธ๋ฆผ์—์„œ ๋นจ๊ฐ„์ƒ‰ ๋„ค๋ชจ์นธ ์•ˆ์— ์žˆ๋Š” Connectors, Data Modeling, Workflow Manager์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋ ค๊ณ  ํ•œ๋‹ค.

1. Connectors

์œ„ ๊ทธ๋ฆผ์—์„œ Connectors๊ฐ€ ๊ฐ€๋ฅดํ‚ค๋Š” ํ™”์‚ดํ‘œ๋ฅผ ์ž˜ ์‚ดํŽด๋ณด๋ฉด ์•Œ ์ˆ˜ ์žˆ๋“ฏ์ด, Sources์—์„œ ๋ฐœ์ƒํ•œ ๋ฐ์ดํ„ฐ๋“ค์„ SnowFlake, ๊ตฌ๊ธ€์˜ BigQuery, AWS์˜ RedShift์™€ ๊ฐ™์€ Data Warehouse๋‚˜ Data Lake(AWS S3, ํ•˜๋‘ก์˜ HDFS, Parquet ๋“ฑ)๋กœ ์ „๋‹ฌํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

 

์œ„ ๊ทธ๋ฆผ์—์„œ ์–ธ๊ธ‰๋œ Connectors์˜ ์˜ˆ์‹œ ํ”Œ๋žซํผ๋“ค์— ๋Œ€ํ•ด ๊ฐ„๋‹จํžˆ ์†Œ๊ฐœํ•˜๊ณ  ๋„˜์–ด๊ฐ€์ž.

 

  • Fivetran : ์†Œ์Šค๋“ค์˜ ๋ฐ์ดํ„ฐ๋“ค์„ Normalization ํ•˜๊ณ  SQL ๋ณ€ํ˜•์„ ์ทจํ•ด ๋ถ„์„์ด ๊ฐ€๋Šฅํ•œ ์Šคํ‚ค๋งˆ(ํ…Œ์ด๋ธ”)๋กœ ๋ณ€ํ˜•ํ•ด์ค€๋‹ค. ํ•ด๋‹น ํ”Œ๋žซํผ์—์„œ Transform(๋ณ€ํ˜•)ํ•˜๋Š” ์—ฐ์‚ฐ ๋น„์šฉ๋ณด๋‹ค ์ƒ๋Œ€์ ์œผ๋กœ ์ €๋ ดํ•œ Load(์ ์žฌ)๋ฅผ ๋จผ์ € ์ˆ˜ํ–‰ํ•˜๋Š” ELT ๊ตฌ์กฐ๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.
  • Stitch : Fivetran๊ณผ ๋น„์Šทํ•œ ์—ญํ• ์„ ํ•œ๋‹ค. ๋‹จ, ETL๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ถ„์„ ๋„๊ตฌ๋ž‘ ์—ฐ๊ฒฐ๊นŒ์ง€ ํ•ด์ฃผ๋Š” ํ”Œ๋žซํผ์ด๋‹ค.
  • MATILLION : ์œ„ 2๊ฐœ์™€ ๋น„์Šทํ•œ ์—ญํ• ์„ ํ•œ๋‹ค. ์ฃผ๋ชฉํ• ๋งŒํ•œ ์ ์€ Data Loader ๊ธฐ๋Šฅ์„ ๋ชจ๋‘์—๊ฒŒ ๋ฌด๋ฃŒ๋กœ ์ œ๊ณตํ•˜๋Š”๋ฐ, ์ด๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœ, ์ ์žฌ๊นŒ์ง€ ํ•˜๋Š” ๊ฒƒ์„ ๋ฌด๋ฃŒ๋กœ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด๋‹ค.(๊ฝ์งœ๋Š” ์–ธ์ œ๋‚˜ ์ง„๋ฆฌ๋‹ค...)
  • Panoply : ์ด๋Š” ์ข€ ํŠ€๋Š” ํ”Œ๋žซํผ์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋ณดํ†ต์€ AWS Redshift๋ผ๋Š” ๋ฐ์ดํ„ฐ ์›จ์–ดํ•˜์šฐ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์†Œ์Šค์˜ ๋ฐ์ดํ„ฐ๋ฅผ ETLํ•˜๋Š” ๋„๊ตฌ๋ฅผ ๋ณ„๋„๋กœ ์‚ฌ์šฉํ•ด์•ผ ํ•˜์ง€๋งŒ Panoply๋Š” ์ด 2๊ฐœ๋ฅผ ํ•œ๊บผ๋ฒˆ์— ํ•  ์ˆ˜ ์žˆ๊ฒŒ ์ œ๊ณตํ•ด์ค€๋‹ค. ๋ณดํ†ต ํฌ๊ธฐ๊ฐ€ ์ž‘์€ ํšŒ์‚ฌ๋“ค์ด ์ฃผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ํ•œ๋‹ค.

2. Data Modeling

์ฐธ๊ณ ๋กœ Data Modeling์€ ์œ„ ๊ทธ๋ฆผ์—์„œ Sources ๋ถ€๋ถ„๊ณผ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์ง€๋Š” ์•Š๋‹ค. ๋‹จ์ง€ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐ์ดํ„ฐ ์›จ์–ดํ•˜์šฐ์Šค์™€ ๋ฐ์ดํ„ฐ ๋ ˆ์ดํฌ์™€ ์—ฐ๊ฒฐ์ด ๋˜์–ด ์žˆ๋‹ค. ๋Œ€์ฒด Data Modeling ์€ ๋ฌด์Šจ ์—ญํ• ์„ ํ•˜๋Š” ๊ฑธ๊นŒ?

 

๋ณดํ†ต ์‹ค๋ฌด์—์„œ ๋ฐ์ดํ„ฐ ๋ถ„์„๊ฐ€๋“ค์€ ETL๊ณผ ๊ฐ™์€ ๋ฐ์ดํ„ฐ ์—”์ง€๋‹ˆ์–ด๋ง ์—…๋ฌด๋ฅผ ์ž˜ ํ•˜์ง€ ์•Š๋Š”๋‹ค. ๊ทธ๋Ÿฐ๋ฐ Data Modeling ๊ด€๋ จ ํ”Œ๋žซํผ๋“ค์€ ๋ฐ์ดํ„ฐ ๋ถ„์„๊ฐ€๋„ ๋ฐ์ดํ„ฐ ์—”์ง€๋‹ˆ์–ด๋ง ์—…๋ฌด๋ฅผ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ๊ฒƒ๋“ค์ด๋‹ค. ์˜ˆ์‹œ ํ”Œ๋žซํผ์œผ๋กœ๋Š” dbt, LookML ๋“ฑ์ด ์žˆ๋‹ค.

3. Workflow Manager

์†Œ์Šค์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™€ ๋ฐ์ดํ„ฐ ์›จ์–ดํ•˜์šฐ์Šค, ๋ฐ์ดํ„ฐ ๋ ˆ์ดํฌ๋กœ ์˜ฎ๊ธฐ๋Š”๋ฐ, ์ด ์˜ฎ๊ธฐ๋Š” ๊ณผ์ •์„ ์›Œํฌํ”Œ๋กœ์šฐ ๋‹จ์œ„๋กœ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. ์š”์ฆ˜ ๊ฐ€์žฅ ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์œผ๋กœ Airflow๊ฐ€ ์žˆ๋‹ค. ๊ฐ„๋‹จํžˆ Airflow๊ฐ€ ์–ด๋–ค ํŠน์ง•์ด ์žˆ๊ณ  ์–ด๋–ค ๊ณผ์ •์œผ๋กœ ๋™์ž‘ํ•˜๋Š”์ง€์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž.

 

Apache Airflow

 

์—์–ดํ”Œ๋กœ์šฐ๋Š” ํฌ๊ฒŒ 3๊ฐ€์ง€ ํŠน์ง•์„ ๊ฐ–๋Š”๋‹ค.

 

  • Task Scheduling : ํŠน์ • task๋ฅผ ์–ธ์ œ ์ฒ˜๋ฆฌํ• ์ง€๋ฅผ ์ •ํ•จ
  • Distributed Executing : ๋งŽ์€ task๋“ค์„ ๋ถ„์‚ฐ์œผ๋กœ ํšจ์œจ์ ์ธ ์ฒ˜๋ฆฌ๋ฅผ ํ•จ
  • Dependency Management : ์˜ˆ๋ฅผ ๋“ค์–ด, ์–ด๋–ค ์•ž์˜ ๊ณผ์ •์ด ๋๋‚˜๊ธฐ ์ „์—๋Š” ๋’ค์˜ ๊ณผ์ •์ด ์ ˆ๋Œ€ ์‹œ์ž‘๋  ์ˆ˜ ์—†๋„๋ก ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
  • DAG(Directed Acyclic Graph) ํŠน์„ฑ

4๊ฐ€์ง€ ํŠน์ง• ์ค‘ 3๋ฒˆ์งธ ์˜์กด์„ฑ ๊ด€๋ฆฌ(Dependency Management)์— ๋Œ€ํ•ด ๋„์‹ํ™”ํ•ด์„œ ์‚ดํŽด๋ณด์ž.

 

์˜์กด์„ฑ ๊ด€๋ฆฌ๋ฅผ ์ดํ•ดํ•ด๋ณด์ž

 

์†Œ์Šค๋“ค์€ 4๊ฐ€์ง€๊ฐ€ ์กด์žฌํ•œ๋‹ค. Transform1 ์ด๋ผ๊ณ  ๋˜์–ด์žˆ๋Š” task๋Š” ๊ด‘๊ณ  ๋ฐ์ดํ„ฐ๋ผ๋Š” ์†Œ์Šค ๋ถ€๋ถ„ ๋กœ์ง์ด ์ˆ˜ํ–‰๋˜๋ฉด ์‹คํ–‰๋  ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿฐ๋ฐ Transform2๋Š” ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ์†Œ์Šค๊ฐ€ 3๊ฐ€์ง€์ด๋‹ค. ๋ฌด์กฐ๊ฑด A,B,C task๋“ค์ด ๋‹ค ์™„๋ฃŒ ๋˜์–ด์•ผ Transform2๊ฐ€ ์ˆ˜ํ–‰๋˜์–ด์•ผ ํ•œ๋‹ค. A,B์˜ ์†Œ์Šค๊นŒ์ง€๋งŒ task๊ฐ€ ์ˆ˜ํ–‰๋˜๊ณ  Transform2๊ฐ€ ์ˆ˜ํ–‰๋˜๋ฉด ์•ˆ๋˜๋Š” ๊ฒƒ์ด๋‹ค. ์ด๊ฒƒ์ด ๋ฐ”๋กœ ์˜์กด์„ฑ ๊ด€๋ฆฌ์ด๋‹ค. ๋”ฐ๋ผ์„œ Airflow๋ผ๋Š” ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•ด A,B,C ์†Œ์Šค๊นŒ์ง€ ๋‹ค task๊ฐ€ ์ˆ˜ํ–‰๋˜์•ผ Transform2๊ฐ€ ์ˆ˜ํ–‰๋˜๋„๋ก ์›Œํฌํ”Œ๋กœ์šฐ ๋‹จ์œ„๋กœ ๊ด€๋ฆฌํ•ด์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.

 

๊ทธ๋ฆฌ๊ณ  ๋งˆ์ง€๋ง‰ ํŠน์ง•์ธ DAG ํŠน์„ฑ์„ ์‚ดํŽด๋ณด์ž. DAG๋ž€, ์‰ฝ๊ฒŒ ๋งํ•ด์„œ loop๊ฐ™์€ ์ˆœํ™˜๋˜๋Š” ๊ตฌ์กฐ๊ฐ€ ์—†๋Š” ๊ทธ๋ž˜ํ”„๋ฅผ ์˜๋ฏธํ•œ๋‹ค. DAG์˜ A์ธ Acyclic์ด '๋น„์ˆœํ™˜'์ด๋ผ๋Š” ์˜๋ฏธ์ด๋‹ค. DAG์— ๋Œ€ํ•œ ๊ทธ๋ฆผ์„ ๋ณด๋ฉด ๋ฐ”๋กœ ์ง๊ด€์ ์œผ๋กœ ์ดํ•ด๊ฐ€ ๋  ๊ฒƒ์ด๋‹ค.

 

DAG ๊ทธ๋ž˜ํ”„

DAG๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ข…๋ฅ˜๋กœ๋„ ๋ถˆ๋ฆฐ๋‹ค. ์œ„ ๊ทธ๋ฆผ์„ ๋ณด๋ฉด ๊ฐ ๋…ธ๋“œ์—์„œ ์ถœ๋ฐœํ•˜๊ฑฐ๋‚˜ ์ž์‹ ์˜ ๋…ธ๋“œ๋กœ ๋“ค์–ด์˜ค๋Š” Edge๋Š” ์žˆ์–ด๋„ ์ž๊ธฐ ์ž์‹ ์œผ๋กœ ๋˜๋Œ์•„์˜ค๋Š” Edge๊ฐ€ ์—†๋‹ค. ์ด๋ ‡๊ฒŒ ์ž์‹ ์œผ๋กœ ๋Œ์•„์˜ค๋Š” Edge ๊ทธ๋ž˜ํ”„๊ฐ€ ์—†์–ด์•ผ๋งŒ ํ•˜๋Š” ๊ทธ๋ž˜ํ”„๊ฐ€ DAG์ด๋‹ค. Airflow๋Š” ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๊ด€๋ฆฌํ•  ๋•Œ ์ด๋ ‡๊ฒŒ DAG ๊ตฌ์กฐ๋งŒ์„ ์œ ์ง€ํ•ด์•ผ ํ•œ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ Airflow ์ด์™ธ์˜ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋‹ค๋ฅธ ๋„๊ตฌ๋ฅผ ์‚ดํŽด๋ณด๊ณ  ๋งˆ๋ฌด๋ฆฌํ•˜์ž.

 

  • DAGSTER : Airflow๋ž‘ ๋น„์Šทํ•˜๋‹ค. ๋‹ค๋งŒ ๋ฐ์ดํ„ฐ Application์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋„๋ก ์ œ๊ณตํ•œ๋‹ค. ์ด๊ฒƒ๋„ DAG ํŠน์„ฑ์„ ์ง€๋‹Œ๋‹ค. ๋‹ค๋งŒ Airflow๋Š” Task ๋‹จ์œ„๋กœ ๊ด€๋ฆฌํ•˜๋Š” Task-Driven ์ด์ง€๋งŒ DAGSTER์€ Data-Driven ์ด๋‹ค.
  • Argo Airflow : Kubernetes์—์„œ ๋Œ์•„๊ฐ€๋Š” ์›Œํฌํ”Œ๋กœ์šฐ์ด๋‹ค.
  • Prefect : Airflow๋ž‘ ๋งค์šฐ ์œ ์‚ฌํ•˜๋‹ค. ๋‹จ, Airflow๊ฐ€ ์ถœ์‹œ๋œ ์ดํ›„์— ๋‚˜์˜จ ๊ฒƒ์ด๋ผ์„œ ๊ทธ๋Ÿฐ์ง€ Airflow๋ณด๋‹ค ์•ž์„œ ๋‚˜๊ฐ€๊ธฐ(?)์œ„ํ•ด์„œ ์‚ฌ์šฉ์ด ์‰ฝ๊ณ  ๋งˆ์น˜ "ํ˜„๋Œ€ํŒ Airflow" ๊ฐ™์€ ๋Š๋‚Œ์ด๋ผ๊ณ  ํ•œ๋‹ค.

 

๋ฐ˜์‘ํ˜•