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

Apache Spark

[Infra] ๋ฐ์ดํ„ฐ ์ธํ”„๋ผ - Ingestion&Transformation(Spark Platform, Python Lib, Batch Query Engine)

๋ฐ˜์‘ํ˜•

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

 

์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ์ €๋ฒˆ ํฌ์ŠคํŒ…์—์„œ ์‚ดํŽด๋ณธ Ingestion & Transformation ๋‹จ๊ณ„์˜ ๋˜ ๋‹ค๋ฅธ ๋„๊ตฌ์ธ Apache Spark Platform์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋ ค๊ณ  ํ•œ๋‹ค. PySpark์— ๋Œ€ํ•ด ๊ณต์‹ ๋ฌธ์„œ๋ฅผ ์ฝ๊ณ  ์–ด๋Š์ •๋„ ๊ณต๋ถ€ํ•œ ๋‚ด์šฉ์„ ์ €๋ฒˆ์— ํฌ์ŠคํŒ…ํ•œ ์ ์ด ์žˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์—ญ์‹œ ๊ณต์‹ ๋ฌธ์„œ๋งŒ์œผ๋กœ ์ดํ•ดํ•œ ๊ฒƒ์ด ๋ชจ๋“  ๊ฑธ ๋‚ด๊ฐ€ ๋‹ค ์ดํ•ดํ•œ ๊ฒƒ์ด ์•„๋‹ˆ์—ˆ๋‹ค.. ๊ทธ๋ž˜์„œ 2๊ฐ€์ง€ ๋งค์ฒด๋ฅผ ํ†ตํ•ด ๋” ๊ณต๋ถ€๋ฅผ ํ•˜๊ณ  ์ •๋ฆฌํ•œ ๋‚ด์šฉ์„ ํฌ์ŠคํŒ…ํ•˜๋ ค ํ•œ๋‹ค.

 

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

 

์œ„ ๋นจ๊ฐ„์ƒ‰ ๋„ค๋ชจ์นธ์˜ ์š”์†Œ๋“ค์„ ๊ฐ๊ฐ ์†Œ๊ฐœํ•˜๊ธฐ ์ „์— ์ด ์š”์†Œ๋“ค์ธ Spark Platform, Python Libs, Batch Query Engine์€ ํŒŒ์ดํ”„๋ผ์ธ ์ˆœ์„œ์ƒ์œผ๋กœ ์ด์ „ ํฌ์ŠคํŒ… ๋งˆ์ง€๋ง‰์— ๋ฐฐ์› ๋˜ Workflow Manager๋ณด๋‹ค ์•ž์„  ์œ„์น˜์— ์กด์žฌํ•œ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ์•ž์œผ๋กœ ์†Œ๊ฐœํ•  Spark Platform, Python Libs, Batch Query Engine์€ ๋ฐ์ดํ„ฐ ๋ถ„์„์„ ์ฝ”๋“œ๋กœ ์งœ๊ณ  ๋ถ„์„ํ•ด๋ณด๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ์ด๊ณ  Workflow Manager๋“ค์ด ์•ž์„œ ๋ถ„์„ํ•˜๊ธฐ ์œ„ํ•ด ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋“ค์„ ์‹ค์งˆ์ ์ธ task๋กœ์„œ ์‹คํ–‰, ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋”ฐ๋ผ์„œ ๋ณธ ํฌ์ŠคํŒ…์—์„œ ์†Œ๊ฐœ๋  ์ปจํ…์ธ ๋“ค์€ Workflow Manager ๋‹ค์Œ์œผ๋กœ ๊ฒŒ์‹œ๋˜์ง€๋งŒ ์‹ค์ œ ํŒŒ์ดํ”„๋ผ์ธ ์ˆœ์„œ๋Š” [Workflow Manager โžก๏ธ Spark Platform, Python Libs, Batch Query Engine] ์ž„์„ ๋ช…์‹ฌํ•˜์ž.


Spark Platform

์•„ํŒŒ์น˜ ์ŠคํŒŒํฌ๋Š” ๋Œ€์šฉ๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ ๋˜๋Š” task๋“ค์„ ์—ฌ๋Ÿฌ ๋Œ€์˜ ์„œ๋ฒ„์— ๋ถ„์‚ฐ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋ฉด์„œ ๋น ๋ฅธ ์ฒ˜๋ฆฌ๋ฅผ ๊ฐ€๋Šฅํ•˜๋„๋ก ํ•ด์ฃผ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์˜๋ฏธํ•œ๋‹ค. Spark๊ฐ€ ์ถœ์‹œ๋˜๊ธฐ ์ด์ „์— ๊ทธ๋‚˜๋งˆ ๋ถ„์‚ฐ์ฒ˜๋ฆฌ๋ฅผ ์ ์šฉํ•  ์ˆ˜ ์žˆ์—ˆ๋˜ ๊ฒƒ์ด Hadoop์˜ MapReduce์ด๋‹ค. ์šฐ์„  ์ด ๋‘˜์˜ ์ฐจ์ด์ ๋ถ€ํ„ฐ ํ‘œ๋กœ ์‚ดํŽด๋ณด์ž.

 

Spark VS MapReduce

 

์ฝ์–ด๋ณด๋ฉด ์•Œ๊ฒ ์ง€๋งŒ ์†๋„์ ์ธ ์ธก๋ฉด์—์„œ Spark๊ฐ€ ์••๋„์ ์œผ๋กœ ๋น ๋ฅด๋‹ค. ๋˜ํ•œ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ์ธก๋ฉด์—์„œ ๋งต๋ฆฌ๋“€์Šค๋Š” Batch Processing(task๋“ค์„ ๋ฌถ์–ด์„œ ์—ฌ๋Ÿฌ ๋Œ€์˜ ์„œ๋ฒ„๋กœ ํ• ๋‹นํ•˜๊ณ  ์ฒ˜๋ฆฌํ•œ ํ›„ ๋‹ค์‹œ ํ•ฉ์น˜๋Š” ๊ณผ์ •)๋งŒ์„ ์ œ๊ณตํ•˜๋Š” ๋ฐ˜๋ฉด ์ŠคํŒŒํฌ๋Š” ์‹ค์‹œ๊ฐ„(real-time), ๊ทธ๋ž˜ํ”„(graph) ๋“ฑ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค. ๋˜ ํŽธ์˜์ƒ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฝ๋‹ค๊ณ  ํ•œ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ํŠน์ง•์ด ๋ฐ์ดํ„ฐ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์บ์‹ฑํ•˜๋Š” ์ŠคํŒŒํฌ์˜ ํŠน์ง•์ธ๋ฐ, ์ด๊ฒƒ์€ ์ŠคํŒŒํฌ๊ฐ€ ์–ด๋–ค ์‹์œผ๋กœ ๋™์ž‘ํ•˜๋Š”์ง€ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•œ ๊ทผ๊ฐ„์ด ๋œ๋‹ค. ์ด์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์•„๋ž˜์—์„œ ์‚ดํŽด๋ณด์ž.

1. MapReduce๋Š” ๋ญ๊ฐ€ ๋ฌธ์ œ์˜€์„๊นŒ?

์ŠคํŒŒํฌ์˜ RDD์— ๋Œ€ํ•ด ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ•˜์šฉํ˜ธ๋‹˜์˜ ์Šฌ๋ผ์ด๋“œ๋ฅผ ๋งค์šฐ ์ฐธ๊ณ ํ–ˆ๋‹ค. ์ดํ•ดํ•˜๊ธฐ ๋„ˆ๋ฌด ์‰ฝ๊ฒŒ ์„ค๋ช…ํ•ด์ฃผ์…”์„œ ์ •๋ง ๊ฐ์‚ฌํ•˜๋‹ค! ์ŠคํŒŒํฌ๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์ „์— ๋งต๋ฆฌ๋“€์Šค๊ฐ€ ๊ฐ–๋Š” ํ•œ๊ณ„์ ๋ถ€ํ„ฐ ์‚ดํŽด๋ณด์ž.

 

  • ๋จธ์‹ ๋Ÿฌ๋‹, ๊ทธ๋ž˜ํ”„์™€ ๊ฐ™์€ ๋ณต์žกํ•˜๊ณ  Multi-Stageํ•œ ์ฒ˜๋ฆฌ๋ฅผ ์ž˜ ํ•˜์ง€ ๋ชปํ•จ
  • Interactiveํ•œ ์ฟผ๋ฆฌ์™€ ad-hocํ•œ ์ฟผ๋ฆฌ๋ฅผ ์ž˜ ์ฒ˜๋ฆฌํ•˜์ง€ ๋ชปํ•จ

์—ฌ๊ธฐ์„œ ํ•„์ž๋Š” Interactive, ad-hocํ•œ ์ฟผ๋ฆฌ์— ๋Œ€ํ•œ ์ •์˜๋ฅผ ์ž˜ ๋ชฐ๋ผ์„œ ์ฐพ์•„๋ณด๊ณ  ์ดํ•ดํ•œ ๋‚ด์šฉ์„ ๊ฐ™์ด ์†Œ๊ฐœํ•˜๋ ค ํ•œ๋‹ค.

 

  • Interactiveํ•œ ์ฟผ๋ฆฌ : Stream Processing์„ ์œ„ํ•œ ์ƒˆ๋กœ์šด ์ฟผ๋ฆฌ ํ˜•ํƒœ. Stream Processing์ด๋ž€, ๋ณ‘๋ ฌ์ฒ˜๋ฆฌ๋ฅผ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‰ฝ๊ฒŒ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์˜๋ฏธํ•œ๋‹ค.
    • Interactiveํ•œ ์ฟผ๋ฆฌ๋Š” Stream Processing์„ ๊ฐ€๋ณ๊ฒŒ ํ•ด์ค€๋‹ค. ์ฆ‰, Stream Processing์„ ํ•˜๋„๋ก ์ฟผ๋ฆฌ๋ฅผ ํ•˜๋Š” ๊ฒƒ์ธ๋ฐ, ์ด ๋•Œ ์™ธ๋ถ€ DB๋‚˜ ์Šคํ† ๋ฆฌ์ง€๋กœ ๊ตฌ์ฒดํ™”ํ•  ํ•„์š” ์—†์ด embedded๋œ DB์ฒ˜๋Ÿผ ๋น ๋ฅด๊ณ  ํšจ์œจ์ ์œผ๋กœ ๊ฐ€๋ณ๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
  • ad-hocํ•œ ์ฟผ๋ฆฌ : ๋น„์ •ํ˜•์ ์ธ ์ฟผ๋ฆฌ๋ฅผ ๋งํ•œ๋‹ค. ์ฆ‰์„์—์„œ ๋˜๋Š” ๋‹จ๋ฐœ์„ฑ์œผ๋กœ ํ•„์š”ํ•œ ์ฟผ๋ฆฌ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

๋˜ํ•œ ๋งต๋ฆฌ๋“€์Šค๋Š” iteration ๊ณผ์ •์„ HDFS๋ผ๋Š” ํŒŒ์ผ์‹œ์Šคํ…œ์— ๋„ฃ์—ˆ๋‹ค ๋บ๋‹ค๊ฐ€๋ฅผ ๋ฐ˜๋ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋Š๋ ค์ง€๊ฒŒ ๋œ๋‹ค. ์ด ๋•Œ ์‚ฌ๋žŒ๋“ค์€ ๊ทธ๋Ÿฌ๋ฉด ์ตœ๊ทผ์— ์ƒ๋Œ€์ ์œผ๋กœ ์ €๋ ดํ•ด์ง„ RAM(RAM์ด๋ž€, ์ฃผ๊ธฐ์–ต์žฅ์น˜๋กœ์„œ ๋ณด์กฐ๊ธฐ์–ต์žฅ์น˜์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™€์„œ CPU๊ฐ€ ์ž‘์—…ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“ค์–ด์ฃผ๋Š” ๊ณต๊ฐ„์„ ์˜๋ฏธ)์„ ์ด์šฉํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค.

2. RAM์„ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ• ๊นŒ?

๊ทธ๋ ‡๋‹ค๋ฉด RAM์„ ์™œ ์‚ฌ์šฉํ• ๊นŒ? ๋ฐ”๋กœ RAM์— ํ•œ ๋ฒˆ ์ €์žฅํ•ด๋†“๊ณ  ์ €์žฅํ•œ ๊ฒƒ์ด ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค ๋นผ์„œ ์“ฐ๋Š” ์›๋ฆฌ๋ฅผ ์ด์šฉํ•  ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ด๋Š” ์–ผ๋งˆ ์ „ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ณต๋ถ€๋ฅผ ํ•˜๋ฉด์„œ Dynamic Programming ์›๋ฆฌ์™€ ๋งค์šฐ ๋น„์Šทํ•˜๋‹ค๊ณ  ๋Š๊ผˆ๋‹ค. ํ•˜์ง€๋งŒ RAM ์ž์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋‹ค๊ฐ€ Fault(๊ณ ์žฅ์ด๋‚˜ ์—๋Ÿฌ)๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋• ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. 

 

๋งŒ์•ฝ ํ•˜๋‚˜๊ฐ€ ๊ณ ์žฅ์ด ๋‚ฌ์„ ๋•Œ ๋‹ค๋ฅธ ๊ฒƒ๋“ค์ด๋ผ๋„ ์‚ด๋ฆฌ๊ธฐ ์œ„ํ•ด์„œ ๋ณต์‚ฌ๋ฅผ ํ•ด๋†“์€ Replicating์„ ํ•˜๊ฒŒ๋˜๋ฉด ์ด Replicating์„ ํ•˜๋Š” ๋™์•ˆ์—๋Š” ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๋ฅผ ๋ฉˆ์ถ”์–ด์•ผ๋งŒ ํ•˜๊ณ  ๊ฒฐ๊ตญ ์†๋„๊ฐ€ ์ €ํ•˜๋˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ๋˜, Replicating๋งŒ์œผ๋กœ๋Š” ์œ„ํ•จํ•  ๊ฒƒ์•„ ๋ฐ์ดํ„ฐ๋ฅผ ๋””์Šคํฌ์— ์ €์žฅํ•˜๋Š” Checkpointing์„ ํ•œ๋‹ค๋ฉด ์†๋„๊ฐ€ ๋งค์šฐ ๋Š๋ ค์ง€๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์‚ฌ๋žŒ๋“ค์€ Fault์— ์ž˜ ๊ฒฌ๋””๊ณ  ํšจ์œจ์ ์ธ ์ด๋ฅธ๋ฐ” Fault-tolerant & Efficient ํ•œ RAM ์Šคํ† ๋ฆฌ์ง€๋ฅผ ์–ด๋–ป๊ฒŒ ๋งŒ๋“ค์ง€ ๊ณ„์†์ ์œผ๋กœ ๊ณ ๋ฏผํ–ˆ๋‹ค.

3. RAM์ธ๋ฐ... ์ฝ๊ธฐ๋งŒ ๊ฐ€๋Šฅํ•œ RAM?

์ œ๋ชฉ ๊ทธ๋Œ€๋กœ๋‹ค. RAM์ด๊ธด ํ•œ๋ฐ Read-only, ์ฆ‰, ์ˆ˜์ •์ด ๋ถˆ๊ฐ€ํ•˜๊ณ  ์ฝ๊ธฐ๋งŒ ๊ฐ€๋Šฅํ•œ RAM์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด๋‹ค. ์ด๋ ‡๊ฒŒ ์ฝ๊ธฐ๋งŒ ๊ฐ€๋Šฅํ•œ RAM์ธ ์ŠคํŒŒํฌ์˜ RDD(Resilient Distributed Dataset)๊ฐ€ ํƒ„์ƒํ•œ๋‹ค.

4. Spark = RDD + Interface (Interface๋Š” ๊ฑฐ๋“ค ๋ฟ..)

์ฐธ์กฐ ์Šฌ๋ผ์ด๋“œ์—์„œ ํ•˜์šฉํ˜ธ๋‹˜์€ ์ŠคํŒŒํฌ์™€ RDD๋ฅผ ๊ฑฐ์˜ ๋™์ผ์‹œํ•˜๋ฉด์„œ RDD์— ๋Œ€ํ•œ ์ดํ•ด์˜ ์ค‘์š”์„ฑ์„ ๊ฐ•์กฐํ•˜์‹ ๋‹ค. ๊ทธ๋Ÿฌ RDD์˜ ํŠน์ง•๋“ค๋ถ€ํ„ฐ ์•Œ์•„๋ณด์ž.

 

  • ์ˆ˜์ •์ด ๋ถˆ๊ฐ€(Immutable), ํŒŒํ‹ฐ์…˜๋œ ๋ ˆ์ฝ”๋“œ๋“ค์˜ ์ง‘ํ•ฉ(Partitioned collections of records)
  • ์Šคํ† ๋ฆฌ์ง€์—์„œ RDD๋กœ ๋˜๋Š” RDD์—์„œ RDD๋กœ๋งŒ ๋ณ€ํ™˜์ด ๊ฐ€๋Šฅ

์œ„์—์„œ ์‚ดํŽด๋ณด์•˜์ง€๋งŒ RDD์˜ ํŠน์„ฑ์€ ์ˆ˜์ •์ด ๋ถˆ๊ฐ€ํ•œ ์ฆ‰, ์ฝ๊ธฐ๋งŒ ๊ฐ€๋Šฅํ•œ Read-only ์„ฑ๊ฒฉ์ด๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜๊ฐ€ ์—†๋Š” ๊ฑธ๊นŒ? ์•„๋‹ˆ๋‹ค. RDD๋Š” ๋ณ€ํ˜•๋˜๋Š” ๋ชจ์Šต๋“ค์„ ๊ณ„์† ๊ธฐ๋กํ•ด์„œ ๊ณ„๋ณด(Lineage)๋ฅผ ๋งŒ๋“ค์–ด์„œ ์ €์žฅํ•œ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•จ์œผ๋กœ์จ Fault-tolerant ๊ฐ€ ๊ฐ€๋Šฅํ•ด์ง€๊ฒŒ ๋œ๋‹ค. RDD๊ฐ€ ๊ณ„๋ณด(Lineage)๋ฅผ ๋งŒ๋“ ๋‹ค๋Š” ๊ฒƒ์ด ์–ด๋–ค ์˜๋ฏธ์ผ๊นŒ? ํ•˜๋‹จ์˜ ๊ทธ๋ฆผ์„ ์ฐธ๊ณ ํ•ด๋ณด์ž.

 

์ถœ์ฒ˜ : ํ•˜์šฉํ˜ธ๋‹˜ Slideshare

 

์–ด๋””์„œ ๋ณธ ์ ์ด ์žˆ์ง€ ์•Š์€๊ฐ€? ๋ฐ”๋กœ Workflow Manager์—์„œ ์‚ดํŽด๋ณด์•˜๋˜ DAG(Directed Acyclic Graph)์ด๋‹ค. ์ฆ‰ ์œ„ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ ํŠน์ • ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด Mapํ•œ ๊ฒฐ๊ณผ, Unionํ•œ ๊ฒฐ๊ณผ, Reduceํ•œ ๊ฒฐ๊ณผ ๋“ฑ๋“ฑ์„ ๋ชจ๋‘ ๊ณ„์†์ ์œผ๋กœ ๊ธฐ๋กํ•ด์„œ ์ผ์ข…์˜ ๊ณ„๋ณด(Lineage)๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด๋‹ค. ๋ฌผ๋ก  ์ด๋„ DAG ๊ตฌ์กฐ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ž๊ธฐ ์ž์‹ ์œผ๋กœ ๋Œ์•„์˜ค๋Š” ์ˆœํ™˜ Edge๋Š” ์ ˆ๋Œ€ ์—†๋‹ค.

5. RDD์˜ 2๊ฐ€์ง€ Operator

RDD์—๋Š” 2๊ฐ€์ง€ ์˜คํผ๋ ˆ์ดํ„ฐ๊ฐ€ ์กด์žฌํ•œ๋‹ค. ๋ฐ”๋กœ Transformations์™€ Actions์ด๋‹ค. ์ด์— ๋Œ€ํ•ด์„  ์˜ˆ์ „์— PySpark ํฌ์ŠคํŒ…ํ•  ๋•Œ๋„ ์ž ๊น ์†Œ๊ฐœํ–ˆ๋˜ ๊ธฐ์–ต์ด ๋‚œ๋‹ค. ๋‹ค์‹œ ๊ฐœ๋…์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž.

 

  • Transformations : ์–ด๋–ค '๋ณ€ํ™˜' ๋˜๋Š” ์–ด๋–ค '๋ณ€ํ™˜๋“ค'์„ ์ทจํ• ์ง€ ๊ณ„์† ์ค€๋น„ํ•ด๋†“๋Š”๋‹ค. ์—ฌ๊ธฐ์„œ ๊ณ„๋ณด(Lineage)๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค.
  • Actions : ์—ฌ๋Ÿฌ๊ฐœ์˜ Transformations๋กœ ๊ตฌ์„ฑ๋œ Lineage๋ฅผ ์‹ค์‹ค์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

Transformations ์™€ Actions ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ๋„์‹ํ™”ํ•ด๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

Transformations ์™€ Actions์˜ ๊ด€๊ณ„

 

์œ„ ๋„์‹ํ™”๋ฅผ ๋ณด๋ฉด ์•Œ๊ฒ ์ง€๋งŒ Actions๋ฅผ ์„ ์–ธํ•˜๊ธฐ ์ „๊นŒ์ง€ ๋ชจ๋“  Transformation๋“ค์ด ๋Œ€๊ธฐ(?)์ƒํƒœ๋กœ ๋˜์–ด ์žˆ๋‹ค. ์ด๋Ÿฌํ•œ ํŠน์„ฑ์œผ๋กœ ์ธํ•ด ์ŠคํŒŒํฌ๊ฐ€ Lazy-Execution ํŠน์„ฑ์ด ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค. ์ด๋Š” ์ž์›์ด ๋ฐฐ์น˜๋˜๊ณ  ๋˜ ๋ฐฐ์น˜๋  ์ƒํ™ฉ์„ ๋ฏธ๋ฆฌ ๊ณ ๋ คํ•ด์„œ ์ตœ์ ์˜ ๋ฃจํŠธ๋กœ ๊ฐˆ ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค€๋‹ค. ๋‹ค์‹œ ๋งํ•ด, ์•„๋ฌด๋ฆฌ ๋ณต์žกํ•œ ์ผ์„ ๋งŽ์ด ์‹œ์ผœ๋„ ์•ˆ ํ•˜๊ณ  ์•„๊ปด๋‘๋‹ค๊ฐ€ ๋งˆ์ง€๋ง‰์— ์ตœ์ ์˜ ๋ฐฉ๋ฒ•์„ ์•Œ์•„์„œ ์ฐพ์•„์„œ ์‹คํ–‰ํ•˜๋Š” ์žฅ์ ์ด ๋œ๋‹ค.

6. RDD์˜ Type Dependency

RDD์˜ Transformations Operator๋“ค์—๋Š” map, filter, reduce, groupbykey, join ๋“ฑ ์—ฌ๋Ÿฌ๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค. ์‚ฌ์šฉ๋˜๋Š” Transformation์— ๋”ฐ๋ผ Type Dependency๊ฐ€ Narrow, Wide๋กœ ๋‚˜๋ˆ„์–ด์ง„๋‹ค.

 

Transformation Operato ์ข…๋ฅ˜์— ๋”ฐ๋ฅธ Dependency type

 

๊ทธ๋ฆผ ์†์—์„œ๋Š” Dependency๊ฐ€ Transformation์œผ๋กœ ๋˜์–ด ์žˆ๋Š”๋ฐ ๋™์ผํ•œ ์˜๋ฏธ๋กœ ํ•ด์„ํ•˜๋ฉด ๋  ๋“ฏ ํ•˜๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์ด์ œ ๋‘ ๊ฐœ์˜ ์ฐจ์ด์ ์— ๋Œ€ํ•ด ์‚ดํŽด๋ณด์ž. ํฐ ํŠน์ง•์€ ํŠน์ • Transformation์„ ์ˆ˜ํ–‰ํ•˜๋ฉด์„œ ๋ฐ์ดํ„ฐ์˜ Shuffle์ด ์ด๋ฃจ์–ด์ง€๋Š” ์•„๋‹Œ์ง€์˜ ์ฐจ์ด์ด๋‹ค.

 

  • Narrow Dependency : ํ˜„์žฌ ์„œ๋ฒ„(์ŠคํŒŒํฌ ์ƒ์—์„œ '๋…ธ๋“œ'๋ผ๊ณ  ๋ถˆ๋ฆผ)์—์„œ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ์ผ์€ ๋‹ค ์ฒ˜๋ฆฌํ•œ๋‹ค. Shuffle์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๋ฉ”๋ชจ๋ฆฌ์˜ ์†๋„๋กœ ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋งค์šฐ ๋น ๋ฅด๋‹ค. 
  • Wide Dependency :  ๋ชจ๋“  ์„œ๋ฒ„(์ŠคํŒŒํฌ ์ƒ์—์„œ '๋…ธ๋“œ'๋ผ๊ณ  ๋ถˆ๋ฆผ)์—์„œ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์ผ์„ ๋‹ค ๊ฐ€์ ธ์™€ ์ฒ˜๋ฆฌํ•œ๋‹ค. Shuffle์„ ์‚ฌ์šฉํ•˜๊ณ  ๋„คํŠธ์›Œํฌ์˜ ์†๋„๋กœ ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋Š๋ฆฌ๋‹ค. ์ด๋Ÿฌํ•œ Transformation๋“ค์€ ์ถ”ํ›„์— ๋””์Šคํฌ์— ๋”ฐ๋กœ ์ €์žฅํ•˜๋Š” Checkpointing์„ ํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค.

7. Spark๊ฐ€ ๋Œ์•„๊ฐ€๋Š” ๊ณผ์ •

์ด์ œ RDD์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์•˜์œผ๋‹ˆ Spark๋ฅผ ์ข€ ์•ˆ ๋“ฏ(?)ํ•œ ๋Š๋‚Œ์ด ๋‚œ๋‹ค. ์ด์ œ Spark๊ฐ€ ํด๋Ÿฌ์Šคํ„ฐ๋ผ๋Š” ๊ฒƒ์„ ์ƒ์„ฑํ•˜๊ณ  ๋‚ด๋ถ€์ ์œผ๋กœ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€ ๋„์‹ํ™”, ์„ค๋ช… ์ž๋ฃŒ๋ฅผ ํ†ตํ•ด ์‚ดํŽด๋ณด์ž.

 

Spark๊ฐ€ ๋Œ์•„๊ฐ€๋Š” ๊ณผ์ •

 

๊ทธ๋Ÿฐ๋ฐ ์–ด์จŒ๊ฑฐ๋‚˜ ์ŠคํŒŒํฌ๊ฐ€ RAM์„ ์‚ฌ์šฉํ•ด์„œ ๋Œ์•„๊ฐ„๋‹ค๊ณ  ํ–ˆ๋‹ค. RAM๋„ ๋ฉ”๋ชจ๋ฆฌ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Ÿด ๋• ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ• ๊นŒ? ์ŠคํŒŒํฌ๋Š” ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ LRU(Least Recently Used) ์•Œ๊ณ ๋ฆฌ์ฆ˜, ์ฆ‰, ๊ฐ€์žฅ ์˜ค๋žซ๋™์•ˆ ์ฐธ์กฐ๋˜์ง€ ์•Š์€ ํŽ˜์ด์ง€๋ฅผ ๊ต์ฒดํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•ด ํŠน์ • ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ญ์ œํ•˜๊ฒŒ ๋œ๋‹ค. ์ž ๊น LRU์— ๊ด€ํ•ด์„œ ๋‚˜์™€์„œ ๋‹ค๋ฅธ ํŽ˜์ด์ง€ ๊ต์ฒด ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ž ๊น๋งŒ ์„ค๋ช…ํ•˜๊ณ  ๋„˜์–ด๊ฐ€๊ฒ ๋‹ค. ์ด์— ๋Œ€ํ•ด ์•„์‹œ๋Š” ๋ถ„๋“ค์€ ๋‹ค์Œ ๋‚ด์šฉ์œผ๋กœ ๋„˜์–ด๊ฐ€๋„ ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค.

 

  • FIFO(First-In-First-Out): ํ์™€ ๋™์ผํ•œ ์›๋ฆฌ์ธ๋ฐ, ํŽ˜์ด์ง€๊ฐ€ ์ฃผ๊ธฐ์–ต์žฅ์น˜์— ์ ์žฌ๋œ ์‹œ๊ฐ„์„ ๊ธฐ์ค€์œผ๋กœ ๊ต์ฒด๋  ํŽ˜์ด์ง€๋ฅผ ์„ ์ •ํ•œ๋‹ค. ์ฆ‰, ๊ฐ€์žฅ ์˜ค๋ž˜๋œ ์‹œ๊ฐ„์ธ ํŽ˜์ด์ง€๊ฐ€ ๊ฐ€์žฅ ์šฐ์„ ์ ์ธ ์‚ญ์ œ ๋Œ€์ƒ์ด๋‹ค. 
    • ๋‹จ์  : ๊ฐ€์žฅ ์˜ค๋ž˜๋œ ํŽ˜์ด์ง€๊ฐ€ ๊ณ„์† ์‚ฌ์šฉ๋˜์–ด์•ผ ํ•œ๋‹ค๋ฉด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.
  • LFU(Least Frequently Used): ๊ฐ€์žฅ ์ ์€ ํšŸ์ˆ˜๋ฅผ ์ฐธ์กฐํ•˜๋Š” ํŽ˜์ด์ง€๋ฅผ ๊ต์ฒด
    • ๋‹จ์  : ๋‹จ์ˆœํžˆ 'ํšŸ์ˆ˜'์— ๊ธฐ๋ฐ˜ํ•˜๋ฏ€๋กœ ์ตœ๊ทผ์— ์‚ฌ์šฉ๋œ ํŽ˜์ด์ง€๋ฅผ ๊ต์ฒด์‹œํ‚ฌ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๊ณ  ํ•ด๋‹น ํšŸ์ˆ˜๋ฅผ ์ฆ๊ฐ€์‹œํ‚ค๋ฉด์„œ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.
  • LRU(Least Recently Used): ๊ฐ€์žฅ ์˜ค๋žซ๋™์•ˆ ์ฐธ์กฐ๋˜์ง€ ์•Š์€ ํŽ˜์ด์ง€๋ฅผ ๊ต์ฒด
    • ๋‹จ์  : ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ฃผ๊ธฐ์–ต์žฅ์น˜์— ์ ‘๊ทผํ•  ๋•Œ๋งˆ๋‹ค ์ฐธ์กฐ๋œ ํŽ˜์ด์ง€์— ๋Œ€ํ•œ ์‹œ๊ฐ„์„ ๊ธฐ๋กํ•ด ํฐ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

์ŠคํŒŒํฌ์˜ ์ค‘์š”ํ•œ ํŠน์ง•์œผ๋กœ ๊ณ ์žฅ์— ์ž˜ ๊ฒฌ๋””๋Š” Fault-tolerant๋ผ๊ณ  ํ–ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์ •๋ง Fault๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ, Recovery๋Š” ์–ด๋–ป๊ฒŒ ํ• ๊นŒ? ์ŠคํŒŒํฌ์—์„œ ์‚ฌ์šฉ๋˜๋Š” Lineage๋Š” ์šฉ๋Ÿ‰์ด ์ž‘๊ธฐ ๋•Œ๋ฌธ์— ๋ถ€๋‹ด๋„ ์—†๊ณ  ์ž˜ ๋กœ๊น…์ด ๋˜๋ฉฐ ํŠน์ • ํŒŒํ‹ฐ์…˜(๋ถ„ํ• ๋œ ๋ฐ์ดํ„ฐ)์— ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๋ฉด ๋‹ค๋ฅธ ๋…ธ๋“œ(์„œ๋ฒ„)๋ฅผ ๊ฐ€์ ธ์™€ ๋Œ€์‹  ์‹คํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค.

8. Spark๋ฅผ ์ œ๊ณตํ•˜๋Š” ํ”Œ๋žซํผ

์ŠคํŒŒํฌ๋„ ์ง์ ‘ ๋‹ค๋ฃจ๊ธฐ๋ณด๋‹ค ์†”๋ฃจ์…˜์œผ๋กœ์„œ ํŽธํ•˜๊ฒŒ ๋งŒ๋“ค์–ด์ฃผ๋Š” ํ”Œ๋žซํผ์ด ์—ญ์‹œ ์กด์žฌํ•œ๋‹ค. ์ŠคํŒŒํฌ๋ฅผ ๋งŒ๋“  ์‚ฌ๋žŒ๋“ค์ด ์ฐฝ์—…ํ•œ DataBricks๊ฐ€ ์žˆ๋‹ค. ๋ณดํ†ต DataBricks๋Š” ์ž‘์€ ์ธ์Šคํ„ด์Šค์ผ ๋•Œ ์ฃผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค๊ณ  ํ•œ๋‹ค. ๋˜ ๋‹ค๋ฅธ ํ”Œ๋žซํผ์œผ๋กœ AWS EMR(Elastic MapReduce)์ด ์žˆ๋‹ค. ์ด๋Š” DataBricks์™€ ๋น„์Šทํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์ง€๋งŒ ๋ณดํ†ต ํฐ ์ธ์Šคํ„ด์Šค์ผ ๋•Œ ์ฃผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค๊ณ  ํ•œ๋‹ค.


Python Libs

๋‹ค์Œ์€ Spark Platform ์ด์™ธ์˜ ์—ฌ๋Ÿฌ๊ฐ€์ง€ Python Library์— ๋Œ€ํ•ด ์†Œ๊ฐœํ•˜๋ ค ํ•œ๋‹ค.

1. Pandas

'ํŒŒ์ด์ฌ์œผ๋กœ ๋ฐ์ดํ„ฐ ๋ถ„์„?' ํ•˜๋ฉด ๋‹น์—ฐํžˆ ๋ˆ„๊ตฌ๋‚˜ ๋“ค์–ด๋ดค์„ ๋ฒ•ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‹ค. ์ฃผ๋กœ 2์ฐจ์› Tabular data๋กœ ๋˜์–ด ์žˆ๋Š” ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„์„ ๋‹ค๋ฃฌ๋‹ค.

2. Boto

Python์œผ๋กœ AWS์— ์ ‘๊ทผ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” SDK(Software Developer Kit)์ด๋‹ค.

3.DASK

Python์œผ๋กœ ๋ณ‘๋ ฌ์ฒ˜๋ฆฌ๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์ค€๋‹ค. Pandas, Numpy, Scikit-learn API๋ฅผ ๋ชจ๋‘ ๋ณ‘๋ ฌ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋„๋ก ํ•ด์ค€๋‹ค. ์ฃผ๋กœ ๋ฐฉ๋Œ€ํ•œ ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„์„ ๋ถ„ํ• ํ•˜๊ฑฐ๋‚˜ ์ „์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋Š” ๋“ฑ๊ณผ ๊ฐ™์ด ๋น…๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„์‚ฐ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ ์ž์ฃผ ์‚ฌ์šฉ๋œ๋‹ค. ํ•˜๋‹จ์—์„œ ์†Œ๊ฐœํ•  Ray์™€๋Š” ๋‹ค๋ฅด๊ฒŒ Centralized ์Šค์ผ€์ฅด๋ง์„ ์‚ฌ์šฉํ•œ๋‹ค.

4.Ray

DASK์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ํŒŒ์ด์ฌ์œผ๋กœ ๋ณ‘๋ ฌ์ฒ˜๋ฆฌ๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์ค€๋‹ค. ์ฃผ๋กœ ์—ฌ๋Ÿฌ๊ฐœ์˜ ๋จธ์‹ ๋Ÿฌ๋‹ ๋ชจ๋ธ์„ ๋ถ„์‚ฐ์ฒ˜๋ฆฌํ•  ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค. DASK์™€๋Š” ๋‹ค๋ฅด๊ฒŒ Bottom-Up ์Šค์ผ€์ค„๋ง์„ ์‚ฌ์šฉํ•œ๋‹ค. ์—ฌ๊ธฐ์„œ Bottom-Up ์Šค์ผ€์ค„๋ง์ด๋ž€, task๋ฅผ ๊ฐ ๋กœ์ปฌ ์Šค์ผ€์ค„๋Ÿฌ์—๊ฒŒ ์ „๋‹ฌํ•˜๊ณ  ๊ฐ๊ฐ์˜ ๋กœ์ปฌ ์Šค์ผ€์ค„๋Ÿฌ๊ฐ€ ๊ฐ Worker๋“ค์—๊ฒŒ ๋‹ค์‹œ task๋ฅผ assign, forward ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. ๊ทธ๋ž˜์„œ Centralized ์Šค์ผ€์ค„๋ง์„ ์‚ฌ์šฉํ•˜๋Š” DASK์— ๋น„ํ•ด ๋น ๋ฅด๊ณ  task ์ง€์—ฐ(latency) ๋ฌธ์ œ์™€ task throughput(task throughput์ด๋ž€, ๋‹จ์œ„ ์‹œ๊ฐ„ ๋‹น ์™„๋ฃŒ๋˜๋Š” task์˜ ์ˆซ์ž ์ฆ‰, task ์™„๋ฃŒ์œจ(rate)๋ฅผ ์˜๋ฏธํ•œ๋‹ค)์„ ๊ฐœ์„ ์‹œํ‚ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.


Batch Query Engine

Apache Hive๋Š” Hadoop์œ„์— ์˜ฌ๋ผ์™€ ์žˆ๋Š” HDFS(Hadoop File System)์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์—”์ง„์ด๋‹ค. ๊ทธ๋Ÿฌ๋ฉด Hive์˜ ์žฅ์ ์€ ๋ฌด์—‡์ผ๊นŒ? ํ•˜๋‘ก์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ฟผ๋ฆฌํ•˜๋ ค๋ฉด MapReduce(๋งต๋ฆฌ๋“€์Šค) ์žก์„ ์ฒ˜๋ฆฌํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค. ํ•˜์ง€๋งŒ Hive๋ฅผ ์‚ฌ์šฉํ•ด์„œ SQL ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค๋ฉด ๋งต๋ฆฌ๋“€์Šค ์žก์œผ๋กœ ์ž๋™์œผ๋กœ ๋ณ€ํ™˜ํ•ด์ฃผ๊ณ  ์‹คํ–‰๋˜๊ณ  ์žˆ๋Š” ํ•˜๋‘ก์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์™€ ์ฒ˜๋ฆฌํ•ด์ฃผ๋Š” ํŽธ์˜์„ฑ์„ ์ œ๊ณตํ•œ๋‹ค.

 

๊ทธ๋Ÿฐ๋ฐ Spark Platform์˜ Spark SQL์˜ ์ฟผ๋ฆฌ ๊ธฐ๋Šฅ์ด ์žˆ๋Š”๋ฐ ๊ตณ์ด Hive๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š” ๋ญ˜๊นŒ? Hive์™€ Spark๋Š” ์„œ๋กœ ์ƒํ˜ธ๋ณด์™„ ์ž‘์šฉ์„ ํ•œ๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์šฐ์„  Hive๊ฐ€ Spark์—๊ฒŒ ์ œ๊ณตํ•˜๋Š” ์žฅ์ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

 

  • Hive โžก๏ธ Spark : Hive ๋•๋ถ„์— ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผ์ด ๊ฐ€๋Šฅ

๋ฐ˜๋ฉด์—, Spark๊ฐ€ Hive์—๊ฒŒ ์ฃผ๋Š” ์žฅ์ ์€ ๋ฌด์—‡์ผ๊นŒ? ์šฐ์„  ํ•˜๋‹จ์˜ ๊ทธ๋ฆผ์„ ๋ณด์ž.

 

์ถœ์ฒ˜ : ๊ธฑ๋‰ด์Šค๋‹˜ ์œ ํˆฌ๋ธŒ ๊ฐ•์˜์˜์ƒ ์† ์ž๋ฃŒ

 

  • Spark โžก๏ธ Hive : Hive ์ฟผ๋ฆฌ๋งŒ์„ ์‚ฌ์šฉํ•ด Spark ์ฟผ๋ฆฌ์˜ ํšจ๊ณผ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

์œ„ ๊ทธ๋ฆผ์„ ๋ณด๋‹ค์‹œํ”ผ Hive๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€(Thrift, JDBC, ODBC) Driver, ์ฆ‰, ์—ฌ๋Ÿฌ๊ฐ€์ง€ Application๊ณผ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์žˆ๋‹ค๋ณด๋‹ˆ ์ด ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๊ฐ–๋Š” DB๋“ค์ด ์žˆ๋‹ค. ๋งŒ์•ฝ Hive๊ฐ€ Spark์™€ ์—ฐ๊ฒฐ๋œ๋‹ค๋ฉด Hive ์‹คํ–‰ ์—”์ง„์œผ๋กœ Spark๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๊ณ  ๋‹จ์ˆœํžˆ Hive ์ฟผ๋ฆฌ๋งŒ์„ ์‚ฌ์šฉํ•ด Hive์™€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜๋“ค์˜ DB์˜ ๋ฐ์ดํ„ฐ๋“ค์„ ์‰ฝ๊ฒŒ ์ฒ˜๋ฆฌํ•˜๊ณ  ๋น ๋ฅด๊ฒŒ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•ด์ง„๋‹ค.

๋ฐ˜์‘ํ˜•