[Spark] Apache Spark ๊ฐœ๋… ๋ฐ ๋ฒ„์ „

2022. 4. 23. 11:53ใ†๐Ÿ›  Data Engineering/Apache Spark

 

 

 

 

Apache Spark์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž.

Apache Spark๋ž€ ๋น…๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ์˜คํ”ˆ์†Œ์Šค ์—”์ง„(๊ณ ์† ๋ถ„์‚ฐ์ฒ˜๋ฆฌ)์ด๋‹ค.

์ด๋ฏธ ์•„๋งˆ์กด, ์šฐ๋ฒ„, ๋„ทํ”Œ๋ฆญ์Šค ๋“ฑ ๋‹ค์–‘ํ•œ ๊ธฐ์—…์—์„œ ์“ฐ์ด๊ณ  ์žˆ๋‹ค.

 

 

 

 

 

Apache Spark ๋“ฑ์žฅ ๋ฐฐ๊ฒฝ


๋ฐ์ดํ„ฐ๊ฐ€ ์Ÿ์•„์ง€๋ฉด์„œ 3๊ฐ€์ง€ ๋ฌธ์ œ๋ฅผ ๋งž์ดํ•œ๋‹ค.

 

1. ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ๊ฐ€ ๊ธฐํ•˜๊ธ‰์ˆ˜์ ์œผ๋กœ ์ฆ๊ฐ€ํ•œ๋‹ค.

2. ๋ฐ์ดํ„ฐ๊ฐ€ ์ƒ์„ฑ๋˜๋Š” ์†๋„๊ฐ€ ์–ด๋งˆ์–ด๋งˆํ•˜๊ฒŒ ์ฆ๊ฐ€ํ–ˆ๋‹ค.

3. ๋ฐ์ดํ„ฐ์˜ ์ข…๋ฅ˜๋„ ์ฆ๊ฐ€ํ–ˆ๋‹ค.

 

๋ฌผ๋ก  ๋ฐ์ดํ„ฐ๋ฅผ ํ†ตํ•ด ์ธ์‚ฌ์ดํŠธ๋ฅผ ์–ป๊ณ ์ž ํ•˜๋Š” ์‚ฌ๋žŒ ์ž…์žฅ์—์„  ์ข‹์„ ์ˆ˜๋„ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ถ„์„ ์ „์— ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ  ์ €์žฅํ•ด์•ผ ํ•˜๋Š” ์ž…์žฅ์—์„  ๋ฌธ์ œ๊ฐ€ ์•„๋‹ ์ˆ˜ ์—†๋‹ค. ๋ฐ์ดํ„ฐ ํฌ๊ธฐ๊ฐ€ ์ฆ๊ฐ€ํ•˜๋ฉด ์ €์žฅ ๋น„์šฉ์ด ์ฆ๊ฐ€ํ•˜๊ณ , ์ƒ์„ฑ๋˜๋Š” ์†๋„๊ฐ€ ์ฆ๊ฐ€ํ•˜๋ฉด ์ €์žฅํ•˜๋Š” ์†๋„๊ฐ€ ๋”ฐ๋ผ์žก์ง€ ๋ชปํ•ด ์•Œ๋งž๊ฒŒ ์ฒ˜๋ฆฌํ•  ์‹œ๊ฐ„์„ ํ™•๋ณดํ•˜์ง€ ๋ชปํ•œ๋‹ค. ์ข…๋ฅ˜๊ฐ€ ์ฆ๊ฐ€ํ•˜๋ฉด ๊ทธ์— ๋”ฐ๋ฅธ ์ฒ˜๋ฆฌ, ๋ถ„์„ ๋ฐฉ๋ฒ•๋„ ํ•„์š”ํ•œ๋ฐ, ๋ฏธ๋ฆฌ ์† ์“ธ ๋ฐฉ๋ฒ•์ด ์—†๋‹ค๋ฉด ๋ฐ์ดํ„ฐ๋ฅผ ๋ฒ„๋ฆฌ๊ฒŒ ๋œ๋‹ค.

 

์ด์— ๋”ฐ๋ผ ์—…๊ณ„์—์„  ํ•ด๊ฒฐ์ฑ…์„ ๋‚ด๋†“์•„์•ผ ํ–ˆ๊ณ , ๊ทธ๋ž˜์„œ ํƒ„์ƒํ•œ ๊ฒƒ์ด Yahoo์˜ hadoop์ด๋‹ค.

 

 

Hadoop์€ ํŒŒ์ผ ์‹œ์Šคํ…œ(HDFS), ์—ฐ์‚ฐ ์—”์ง„(Map Reduce), ๋ฆฌ์†Œ์Šค ๊ด€๋ฆฌ(Yarn)์˜ ๊ธฐ๋Šฅ์„ ์„ ๋ณด์˜€๋‹ค. ๊ทธ์ค‘์—์„œ ์—ฐ์‚ฐ ์—”์ง„์„ Map Reduce ๋Œ€์‹  Spark๊ฐ€ ๋” ์ข‹์€ ์„ฑ๋Šฅ์„ ๋‚ด๋ฉด์„œ Spark๊ฐ€ ์œ ๋ช…์„ธ๋ฅผ ํƒ”๋‹ค. 

 

 

 

 

 

 

Spark ์ž‘๋™ ์›๋ฆฌ


Spark์˜ ์žฅ์ ์€ '๋น ๋ฅด๋‹ค'๋Š” ๊ฒƒ์ด๋‹ค.

์™œ Spark๊ฐ€ ๋น ๋ฅผ๊นŒ?

Spark์˜ ๋‹ด๋‹น ์˜์—ญ์ธ ์—ฐ์‚ฐ ์—”์ง„์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ตฌ์กฐ๋ฅผ ๋”ฐ๋ฅธ๋‹ค.

 

 

 

์ปดํ“จํ„ฐ๊ฐ€ ์—ฐ์‚ฐ์„ ์‹œ์ž‘ํ•˜๋ฉด ํ•˜๋“œ๋””์Šคํฌ์—์„œ CPU๊นŒ์ง€ ๋ฐ์ดํ„ฐ๊ฐ€ ์œ„๋กœ ์ด๋™ํ•œ๋‹ค. ์—ฐ์‚ฐ์— ์ž์ฃผ ์“ฐ์ด๋Š” ๋ฐ์ดํ„ฐ๋Š” ์œ„๋กœ ๋ฐฐ์น˜๋˜๊ณ  ์—ฐ์‚ฐ์— ์ž์ฃผ ์“ฐ์ด์ง€ ์•Š๋Š” ๋ฐ์ดํ„ฐ๋Š” ์•„๋ž˜๋กœ ๋ฐฐ์น˜๋œ๋‹ค. ์†๋„๋Š” HDD, ์ฆ‰ ๋””์Šคํฌ ์˜์—ญ์—์„œ ์ œ์ผ ๋Š๋ฆฌ๊ณ , CPU๋กœ ์˜ฌ๋ผ๊ฐˆ ์ˆ˜๋ก ๋นจ๋ผ์ง„๋‹ค. CPU์—์„œ ์ œ์ผ ๋น ๋ฅด๋‹ˆ๊นŒ ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋‘ CPU์—์„œ ์ฒ˜๋ฆฌํ•˜๋ฉด ๋˜์ง€ ์•Š์„๊นŒ? ๋ผ๋Š” ์˜๋ฌธ์ด ๋“ค ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ณ„์ธต ์œ„๋กœ ์˜ฌ๋ผ๊ฐˆ์ˆ˜๋ก ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅํ•œ ์†๋„์™€ ์šฉ๋Ÿ‰์ด ๋ฐ˜๋น„๋ก€ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์šฉ๋Ÿ‰์ด ํฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋น ๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์€ ์–ด๋ ค์›Œ ๋ณด์˜€๋‹ค.

 

 

 

์ด๋•Œ Spark์—์„œ ๋‚ด๋†“์€ ๊ฒƒ์ด '๋ฐ์ดํ„ฐ๋ฅผ ์ชผ๊ฐœ์„œ ์ฒ˜๋ฆฌํ•˜์ž' ์˜€๋‹ค.

 

 

๋ฐ์ดํ„ฐ๋ฅผ ์ชผ๊ฐœ ์—ฌ๋Ÿฌ ๋…ธ๋“œ๋กœ ๋ถ„๋ฐฐํ•œ๋‹ค. ๊ทธ ํ›„, ์—ฌ๋Ÿฌ ๋…ธ๋“œ์˜ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•œ๋‹ค.

๋‹ค์Œ ๊ทธ๋ฆผ์€ Spark์˜ ์ „์ฒด์  ๊ตฌ์กฐ์ด๋‹ค.

 

 

 

 

 

 

์šฐ๋ฆฌ๊ฐ€ ์ตํžˆ ์•„๋Š” Python, Java, Scala ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ด์šฉํ•ด ๋ช…๋ นํ•œ๋‹ค.

๋ช…๋ น์„ ๋ฐ›์€ Cluster Manager๋Š” Node์— ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„์‚ฐ์‹œ์ผœ ์—ฐ์‚ฐ ์ฒ˜๋ฆฌ๋ฅผ ์ง„ํ–‰ํ•˜๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋‹ค์‹œ Script๋ฅผ ํ†ตํ•ด ๋ฐ›์•„์˜จ๋‹ค. 

 

 

 

 

 

 

Pandas vs Spark


Spark์ฒ˜๋Ÿผ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„ ๋“ฑ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ๋Š” ๋Œ€ํ‘œ์ ์œผ๋กœ Pandas๊ฐ€ ์žˆ๋‹ค.

ํ•˜์ง€๋งŒ ์ž‘์€ ๋ฐ์ดํ„ฐ์—์„  ํŒ๋‹ค์Šค๋ณด๋‹ค Spark๊ฐ€ ์ฒ˜๋ฆฌ ์†๋„๊ฐ€ ๋Š๋ฆฌ๋‹ค. ์ด๋Š” Spark๊ฐ€ ํ™•์žฅ์„ฑ์„ ๊ณ ๋ คํ•ด์„œ ์„ค๊ณ„ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋ฐ์ดํ„ฐ ํฌ๊ธฐ๊ฐ€ ์ฆ๊ฐ€ํ• ์ˆ˜๋ก Pandas์˜ ์ฒ˜๋ฆฌ์†๋„๋Š” O(n) ๋Š๋‚Œ์œผ๋กœ ์ฆ๊ฐ€ํ•˜์ง€๋งŒ, Spark๋Š” ๊ทธ๋ ‡์ง€ ์•Š๋‹ค. 

 

 

 

์ฆ‰, Spark๋Š” ํ•„์š”์— ๋”ฐ๋ผ ๋…ธ๋“œ๋ฅผ ๊ณ„์†ํ•ด์„œ ๋Š˜๋ ค์„œ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์†๋„๋Š” ํฌ๊ฒŒ ๋Š˜์–ด๋‚˜์ง€ ์•Š๋Š” ํŠน์ง•์„ ๊ฐ€์ง„๋‹ค.

 

Hadoop MapReduce๋ณด๋‹ค

๋ฉ”๋ชจ๋ฆฌ ์ƒ์—์„  100๋ฐฐ ๋น ๋ฅด๊ณ ,

๋””์Šคํฌ ์ƒ์—์„  10๋ฐฐ ๋น ๋ฅด๋‹ค.

 

Lazy Evaluation

task๋ฅผ ์ •์˜ํ•  ๋•Œ๋Š” ์—ฐ์‚ฐํ•˜์ง€ ์•Š์œผ๋ฉฐ ๊ฒฐ๊ณผ๊ฐ€ ํ•„์š”ํ•  ๋•Œ ์—ฐ์‚ฐํ•œ๋‹ค.

๊ธฐ๋‹ค๋ฆฌ๋ฉด์„œ ์—ฐ์‚ฐ ๊ณผ์ •์„ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

RDD(Resilient Distributed Dataset)

์—ฌ๋Ÿฌ ๋ถ„์‚ฐ ๋…ธ๋“œ์— ๊ฑธ์ณ์„œ ์ €์žฅํ•˜๋ฉฐ,

๋ณ€๊ฒฝ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

์—ฌ๋Ÿฌ ๊ฐœ์˜ ํŒŒํ‹ฐ์…˜์œผ๋กœ ๋ถ„๋ฆฌํ•˜๋ฉฐ Immutable ์„ฑ์งˆ์„ ๊ฐ€์ง„๋‹ค.

 

 

 

 

 

Spark History


 

Spark 1.0

- 2014๋…„

- RDD๋ฅผ ์ด์šฉํ•œ ์ธ๋ฉ”๋ชจ๋ฆฌ ์ฒ˜๋ฆฌ ๋ฐฉ์‹

- DataFrame

- Project Tungsten: ์—”์ง„ ์—…๊ทธ๋ ˆ์ด๋“œ๋กœ ๋ฉ”๋ชจ๋ฆฌ์™€ CPU ํšจ์œจ ์ตœ์ ํ™”

 

Spark 2.0

- 2016๋…„

- ๋‹จ์ˆœํ™”, ์„ฑ๋Šฅ ๊ฐœ์„ 

- Structured Streaming

- DataSet์ด๋ผ๋Š” DataFrame์˜ ํ™•์žฅํ˜• ์ž๋ฃŒ๊ตฌ์กฐ ๋“ฑ์žฅ

- Catalyst Optimizer ํ”„๋กœ์ ํŠธ - ์–ธ์–ด์— ์ƒ๊ด€์—†์ด ๋™์ผํ•œ ์„ฑ๋Šฅ

 

Spark 3.0

- 2020๋…„

- MLib ๊ธฐ๋Šฅ ์ถ”๊ฐ€

- Spark SQL ๊ธฐ๋Šฅ ์ถ”๊ฐ€

- PySpark ์‚ฌ์šฉ์„ฑ ๊ฐœ์„ 

- ๋”ฅ๋Ÿฌ๋‹ ์ง€์› ๊ฐ•ํ™”

- GraphX - ๋ถ„์‚ฐ ๊ทธ๋ž˜ํ”„ ์—ฐ์‚ฐ

- Spark 2.4๋ณด๋‹ค ์•ฝ 2๋ฐฐ ๋นจ๋ผ์ง