Apache Spark

date
Mar 12, 2024
slug
apache-spark
status
Published
tags
Tool
PL & Compiler
summary
type
Post
์•„ํŒŒ์น˜ ์ŠคํŒŒํฌ(Apache Spark)๋Š” ํ•˜๋‘ก ๋งต๋ฆฌ๋“€์Šค๊ฐ€ ๋””์Šคํฌ ๊ธฐ๋ฐ˜์œผ๋กœ ์›€์ง์ธ๋‹ค๋Š” ๊ตฌ์กฐ์  ๋‹จ์ ์„ ๋ฉ”๋ชจ๋ฆฌ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ทน๋ณตํ•˜๋ฉด์„œ ํ•˜๋‘ก ์ƒํƒœ๊ณ„์˜ ์ค‘์‹ฌ์— ์ž๋ฆฌ์žก๊ฒŒ ๋œ ์˜คํ”ˆ์†Œ์Šค ๋ถ„์‚ฐ ๋ณ‘๋ ฌ ํ”„๋ ˆ์ž„์›Œํฌ์ด๋‹ค.
์ŠคํŒŒํฌ๋Š” RDD(Resilient Distributed Dataset)๋ผ๋Š” ๋ถ„์‚ฐ ์ž๋ฃŒ ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ, RDD๋Š” ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€๋Šฅ(Immutable)ํ•œ ๋ฆฌ์ŠคํŠธ์— ๋Œ€ํ•ด ๊ณ ์ฐจ ํ•จ์ˆ˜๋ฅผ ์ ์šฉํ•œ๋‹ค๋Š” ํ•จ์ˆ˜ํ˜• ์–ธ์–ด์˜ ๊ธฐ๋ณธ์ ์ธ ์ฒ˜๋ฆฌ ๋ฐฉ์‹์„ ๋”ฐ๋ฅธ๋‹ค.
โ†’ ๋ถ„์‚ฐ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ๋  ์ˆ˜ ์žˆ๋Š” ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€ํ•œ ๋ฆฌ์ŠคํŠธ, ๊ณ ์ฐจ ํ•จ์ˆ˜์™€ ๋žŒ๋‹ค์‹์„ ๋ฐ”ํƒ•์œผ๋กœ ๋ฐ์ดํ„ฐ ๊ธฐ์ˆ  ๊ฐ€๋Šฅ
๋˜ํ•œ Hadoop์„ ์‚ฌ์šฉํ•  ๋•Œ Java๋ฅผ ์‚ฌ์šฉํ–ˆ๋Š”๋ฐ ํ•ด๋‹น ์–ธ์–ด์˜ ํŠน์„ฑ์œผ๋กœ ์ธํ•ด ๊ฐ„๋‹จํ•œ ๋งต๋ฆฌ๋“€์Šค ์ž‘์—…์—๋„ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํŒŒ์ผ, ํด๋ž˜์Šค๋ฅผ ์ž‘์„ฑํ•ด์•ผ ํ–ˆ์œผ๋‚˜, Spark๋Š” Scala๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ™์€ ์ž‘์—…์„ ํ›จ์”ฌ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.
โ†’ ๋น… ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ์™€ ํ•จ์ˆ˜ํ˜• ์–ธ์–ด์˜ ๋งŒ๋‚จ์ด ๊ฐ€์ ธ๋‹ค์ฃผ๋Š” ํ˜œํƒ

์ŠคํŒŒํฌ์˜ ๋™์ž‘ ๊ณผ์ •

๋“œ๋ผ์ด๋ฒ„(Driver)์™€ ์ต์Šคํํ„ฐ(Executor) ํ”„๋กœ๊ทธ๋žจ์ด ํ˜‘๋™ํ•˜์—ฌ ์ผ์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.
๋“œ๋ผ์ด๋ฒ„๋Š” main์ด ๋Œ์•„๊ฐ€๋Š” ํ”„๋กœ๊ทธ๋žจ, ์ต์Šคํํ„ฐ์—๊ฒŒ ์ ์ ˆํžˆ ๋ถ„์‚ฐ ์ฒ˜๋ฆฌ๋ฅผ ๋ช…๋ นํ•˜๋ฉด ์ต์Šคํํ„ฐ๋Š” ๊ทธ ๋ช…๋ น์— ๋”ฐ๋ผ ์‹ค์ œ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.
์œ„ ์ฝ”๋“œ๋ฅผ spark-shell ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰ํ–ˆ๋‹ค๋ฉด spark-shell์ด ๋“œ๋ผ์ด๋ฒ„ ํ”„๋กœ๊ทธ๋žจ์ด ๋œ๋‹ค. ๋“œ๋ผ์ด๋ฒ„๋Š” ์ฝ”๋“œ์˜ ๋‚ด์šฉ์„ ํ•ด์„ํ•ด์„œ ์ต์Šคํํ„ฐ์—๊ฒŒ ํ•„์š”ํ•œ ์ผ์„ ์‹œํ‚ค๊ณ , ํ•„์š”ํ•  ๋•Œ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋Œ๋ ค๋ฐ›๋Š”๋‹ค.
์ฆ‰ ์ฝ”๋“œ๋Š” spark-shell์—์„œ ์ž…๋ ฅํ–ˆ์ง€๋งŒ, ์‹ค์ œ ์ผ์€ ๋‹ค๋ฅธ ๋จธ์‹ ์—์„œ ์ผ์–ด๋‚˜๋Š” ๊ฒƒ์ด๋‹ค.
๋˜ํ•œ ํŠธ๋žœ์Šคํฌ๋ฉ”์ด์…˜(Transformation)๊ณผ ์•ก์…˜(Action)์œผ๋กœ ๋‚˜๋‰œ๋‹ค๋Š” ๊ฐœ๋…์ด ์กด์žฌํ•˜๋Š”๋ฐ, map, filter, flatMap, distinct ์™€ ๊ฐ™์€ ํŠธ๋žœ์Šคํฌ๋ฉ”์ด์…˜ ์—ฐ์‚ฐ์€ lazyํ•˜๊ฒŒ ๋™์ž‘ํ•˜์—ฌ reduce, collect, foreach, count ์™€ ๊ฐ™์€ ์•ก์…˜ ์—ฐ์‚ฐ์ด ๋ฐœ์ƒํ•  ๋•Œ๊นŒ์ง€ ๊ณ„์‚ฐ์„ ๋ฏธ๋ฃฌ๋‹ค.
๋งŒ์•ฝ ๋ฐ์ดํ„ฐ๊ฐ€ ์ปค์„œ ํ•˜๋‚˜์˜ ์—ฐ์‚ฐ์— ๋ช‡ ๋ถ„์”ฉ ๊ฑธ๋ฆฌ๋Š” ์ƒํ™ฉ์—์„œ lazyํ•œ ํ‰๊ฐ€ ๋ฐฉ์‹์ด ์—†์—ˆ๋‹ค๋ฉด, ํ•œ ์ค„์˜ ์ฝ”๋“œ๋ฅผ ์ž…๋ ฅํ•  ๋•Œ๋งˆ๋‹ค ๊ธด ์‹œ๊ฐ„์„ ๊ธฐ๋‹ค๋ ค์•ผ ํ•œ๋‹ค.

์‹คํ–‰ ๊ฒฐ๊ณผ

๋งˆ์Šคํ„ฐ(Master)์™€ ์Šฌ๋ ˆ์ด๋ธŒ(Slave)๋ฅผ ๊ธฐ๋™ํ•˜์˜€๊ณ , ์Šฌ๋ ˆ์ด๋ธŒ๋Š” ๋งˆ์Šคํ„ฐ์™€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋‹ค.
notion image
notion image
์œ„ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•œ ํ™˜๊ฒฝ์€ 1๊ฐœ์˜ Worker์— 8๊ฐœ์˜ Core๊ฐ€ ์ค€๋น„๋˜์–ด ์žˆ๋Š” ์ƒํƒœ์ด๋ฉฐ, ๊ณต๋ฐฑ์„ ๊ธฐ์ค€์œผ๋กœ splitํ–ˆ์„ ๋•Œ 8๊ฐœ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ RDD์— ์กด์žฌํ•˜๊ณ  ์žˆ๋‹ค.
8๊ฐœ์˜ ์ต์Šคํํ„ฐ๊ฐ€ ์‹คํ–‰๋˜์–ด ์•„๋ž˜ ์‚ฌ์ง„๊ณผ ๊ฐ™์ด ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ๊ฐ€ ๋ถ„์‚ฐ๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
notion image

Hadoop๊ณผ์˜ ๋น„๊ต

Java๋กœ Hadoop์„ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ Mapper, Reducer ํด๋ž˜์Šค๋ฅผ ์ž‘์„ฑํ•  ๋•Œ ๋งŽ์€ ์ฝ”๋“œ๊ฐ€ ํ•„์š”ํ–ˆ์ง€๋งŒ, Spark๋Š” RDD์˜ ๊ณ ์ฐจ ํ•จ์ˆ˜์ธ flatMap, map, reduceByKey ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ต์Šคํํ„ฐ์— ์˜ํ•ด ์—ฐ์‚ฐ๋œ ๊ฒฐ๊ณผ๋ฅผ ๋“œ๋ผ์ด๋ฒ„์—์„œ collectํ•˜์—ฌ ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.
โ†’ ์‹ค์ œ ์—ฐ์‚ฐ ์ˆ˜ํ–‰์€ ๋“œ๋ผ์ด๋ฒ„๊ฐ€ ์•„๋‹Œ ์ต์Šคํํ„ฐ์—์„œ ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— collect๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  println๋งŒ ์ˆ˜ํ–‰ํ•˜๋ฉด ์•„๋ฌด๋Ÿฐ ๊ฒฐ๊ณผ๊ฐ€ ์ถœ๋ ฅ๋˜์ง€ ์•Š๋Š”๋‹ค.
โ†’ collect๋ฅผ ํ†ตํ•ด ๋ถ„์‚ฐ๋˜์–ด ์žˆ๋Š” RDD์˜ ๋‚ด์šฉ์„ ๋“œ๋ผ์ด๋ฒ„๊ฐ€ ์ˆ˜์ง‘ํ•˜๋ฉฐ, ์ด์ œ ์ •์ƒ์ ์œผ๋กœ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ๋‹ค.

ยฉ hyuunnn 2024