[Spark] ๋ถ„์‚ฐ/๋ณ‘๋ ฌ ์ฒ˜๋ฆฌํ•  ๋•Œ ์ฃผ์˜ํ•  ์ 

2022. 5. 1. 09:02ใ†๐Ÿ›  Data Engineering/Apache Spark

 

 

 

 

์•ž ํฌ์ŠคํŒ…์—์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด, Spark๋Š” ๋ถ„์‚ฐ/๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ๋ฅผ ์ง€์›ํ•œ๋‹ค.

ํ•˜์ง€๋งŒ ๋ถ„์‚ฐ/๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ๊ฐ€ ๋œ๋‹ค๊ณ  ๋งˆ๋ƒฅ ๋ฏฟ๊ณ  ์“ฐ๊ธฐ๋งŒ ํ•ด์„œ๋Š” ์•ˆ๋œ๋‹ค.

๋ถ„์‚ฐ/๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ์˜ ์„ฑ๋Šฅ์„ ์˜ฌ๋ฆฌ๊ณ , ๋น„์šฉ์„ ์ค„์ด๊ธฐ ์œ„ํ•ด์„  ์ƒ๊ฐํ•ด์ค˜์•ผ ํ•  ๊ฒƒ๋“ค์ด ๋ช‡๋ช‡ ์žˆ๋‹ค.

์ง€๊ธˆ๋ถ€ํ„ฐ ๊ทธ ์š”์†Œ๋“ค์„ ์‚ดํŽด๋ณด๊ณ  ์–ด๋–ป๊ฒŒ ์ฝ”๋”ฉํ•ด์•ผ ํ• ์ง€ ๋ฐฉํ–ฅ์„ ์งš์–ด๋ณด์ž.

 

 

 

 

 

Distributed Data-Parallel


๋จผ์ € Spark์˜ ํ•ต์‹ฌ์ธ 'Distributed Data-Parallel'์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์ž.

 

๋ถ„์‚ฐ๋œ ํ™˜๊ฒฝ์—์„œ์˜ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ๋ž€?

 

1) ๋ฐ์ดํ„ฐ๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ๋กœ ๋‚˜๋ˆ„์–ด ์—ฌ๋Ÿฌ ๋…ธ๋“œ๋กœ ๋ณด๋‚ธ๋‹ค.

2) ๊ฐ ๋…ธ๋“œ์—์„œ ๋…๋ฆฝ์ ์œผ๋กœ task๋ฅผ ์‹œํ–‰.

3) ๊ฐ์ž ๋งŒ๋“  ๊ฒฐ๊ด๊ฐ’์„ ํ•ฉ์นœ๋‹ค.

 

์ด ์ผ๋ จ์˜ ๊ณผ์ •์ด ๋ถ„์‚ฐ๋œ ํ™˜๊ฒฝ์—์„œ์˜ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ์ด๋ฉฐ, ๊ทธ๋ฆผ์œผ๋กœ ํ‘œํ˜„ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. 

 

 

 

 

 

 

Spark๋ฅผ ์ฒ˜์Œ ์ ‘ํ•œ๋‹ค๋ฉด, ๊ทธ๋ž˜์„œ ์–ด๋–ป๊ฒŒ ๋ถ„์‚ฐ/๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ๋ฅผ ํ•œ๋‹ค๋Š” ๊ฑด๋ฐ?๋ผ๊ณ  ์˜๋ฌธ์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค. 

์ด์ „ ํฌ์ŠคํŒ…์—์„œ ๋‹ค๋ค˜๋˜ 'RDD'๋ฅผ ์ด์šฉํ•˜๋ฉด ์†์‰ฝ๊ฒŒ ๋ถ„์‚ฐ/๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

RDD.map(task)

 

RDD, ๊ทธ ์ž์ฒด๋กœ ์ด๋ฏธ ๋ฐ์ดํ„ฐ๋Š” ๋ถ„์‚ฐ๋˜์–ด ์žˆ๋‹ค. ๊ทธ ์ƒํƒœ์—์„œ map() ํ•จ์ˆ˜์— ํŠน์ • task๋ฅผ ๋„ฃ์–ด์ฃผ๋ฉด ์•Œ์•„์„œ ๋ถ„์‚ฐ๋œ ์ƒํ™ฉ์—์„œ task๋ฅผ ์‹คํ–‰ํ•œ๋‹ค. ์ด๊ฒƒ์ด ๋ฐ”๋กœ ๋ถ„์‚ฐ๋œ ํ™˜๊ฒฝ์—์„œ์˜ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ์ด๋‹ค. 

 

 

์ž, Distributed Data-Parallel ๊ฐœ๋…์„ ์•Œ์•„๋ณด์•˜๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ๋ถ„์‚ฐ/๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ์˜ ์„ฑ๋Šฅ์„ ๋Œ์–ด๋‚ด๊ธฐ ์œ„ํ•ด์„  ์–ด๋–ค ์š”์†Œ๋ฅผ ์‹ ๊ฒฝ ์จ์•ผ ํ• ๊นŒ?

 

 

 

 

 

๋ถ„์‚ฐ/๋ณ‘๋ ฌ ์ฒ˜๋ฆฌํ•  ๋•Œ ์ฃผ์˜ํ•  ์ 


๋ถ„์‚ฐ์ฒ˜๋ฆฌ ์‹œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฌธ์ œ๋ฅผ ์‹ ๊ฒฝ ์จ์•ผ ํ•œ๋‹ค. 

 

1) ๋ถ€๋ถ„ ์‹คํŒจ - ๋…ธ๋“œ ๋ช‡ ๊ฐœ๊ฐ€ ์‹คํŒจํ•˜๋Š” ๊ฒฝ์šฐ

2) ์†๋„ - ๋งŽ์€ ๋„คํŠธ์›Œํฌ ํ†ต์‹ ์„ ํ•„์š”๋กœ ํ•˜๋Š” ๊ฒฝ์šฐ, ์†๋„ ์ €ํ•˜

 

 

์ฒซ ๋ฒˆ์งธ ๋ฌธ์ œ์ธ '๋ถ€๋ถ„ ์‹คํŒจ'์˜ ๊ฒฝ์šฐ, RDD๋ฅผ ์ด์šฉํ•œ๋‹ค๋ฉด ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค. RDD๋Š” ๋ณ€ํ˜• ์ด์ „์˜ ๋ฐ์ดํ„ฐ ๋กœ๊ทธ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์‹คํŒจํ•ด๋„ ๋Œ์•„๊ฐ€๋ฉด ๊ทธ๋งŒ์ด๋‹ค. 

๋ฌธ์ œ๋Š” ๋‘ ๋ฒˆ์งธ ๋ฌธ์ œ์ด๋‹ค. ๋ถ„์‚ฐ๋œ ํ™˜๊ฒฝ์—์„œ์˜ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ๋Š” ๊ฒฐ๊ตญ ๋…ธ๋“œ ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ํ†ต์‹ ์„ ํ•„์š”๋กœ ํ•œ๋‹ค. ํ†ต์‹ ์— ๋‹ด๊ธฐ๋Š” ๋ฐ์ดํ„ฐ ํฌ๊ธฐ๊ฐ€ ์ปค์ง€๊ณ , ๋…ธ๋“œ ๊ฐ„ ์ƒํ˜ธ์ž‘์šฉ์ด ๋ณต์žกํ•ด์งˆ์ˆ˜๋ก ์†๋„๋Š” ๊ธ‰๊ฒฉํžˆ ์ €ํ•˜๋œ๋‹ค. 

๋”ฐ๋ผ์„œ ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•  ๋•Œ ์ด๋Ÿฐ ํ†ต์‹  ๋ฌธ์ œ๋ฅผ ์‹ ๊ฒฝ ์จ์ค˜์•ผ ํ•œ๋‹ค. ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด์ž.

 

 

# 1
RDD.map(A).filter(B).reduceByKey(C).take(100)



# 2
RDD.map(A).reduceByKey(C).filter(B).take(100)

 

 

์ฒซ ๋ฒˆ์งธ ์ฝ”๋“œ๋Š” (1) task A๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  (2) B ์กฐ๊ฑด์œผ๋กœ filtering์„ ํ•œ ๋‹ค์Œ, (3) ๋…ธ๋“œ ๊ฐ„ ํ†ต์‹ ์„ ์ด์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์š”์•ฝํ–ˆ๋‹ค. (4) ๊ทธ ํ›„, take(100) ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด 100๊ฐœ์˜ ์š”์†Œ๋ฅผ ๋žœ๋ค์œผ๋กœ ์ง‘์—ˆ๋‹ค. 

 

๋‘ ๋ฒˆ์งธ ์ฝ”๋“œ๋Š” (1) task A๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  (2) ๋…ธ๋“œ ๊ฐ„ ํ†ต์‹ ์„ ์ด์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์š”์•ฝํ•œ ๋‹ค์Œ, (3) B ์กฐ๊ฑด์œผ๋กœ filtering ํ–ˆ๋‹ค. (4) ๊ทธ ํ›„, take(100) ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด 100๊ฐœ์˜ ์š”์†Œ๋ฅผ ๋žœ๋ค์œผ๋กœ ์ง‘์—ˆ๋‹ค.

 

 

์–ด๋–ค ์ฝ”๋“œ๊ฐ€ ๋” ์„ฑ๋Šฅ์ด ์ข‹์„๊นŒ?

ํ•œ ๋ฒˆ ํ˜ผ์ž ์ƒ๊ฐํ•ด๋ณด์ž. 

.

.

.

.

๋‹ต์€ ์ฒซ ๋ฒˆ์งธ ์ฝ”๋“œ์ด๋‹ค.

๊ทธ ์ด์œ ๋Š”, ๋…ธ๋“œ ๊ฐ„ ํ†ต์‹ ์„ ํ•˜๊ธฐ ์ „ ๋ฐ์ดํ„ฐ ํฌ๊ธฐ๋ฅผ ๋จผ์ € ์ค„์—ฌ์คฌ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ํฌ๊ธฐ๊ฐ€ ์ค„์—ˆ๊ธฐ์— ํ†ต์‹ ์„ ํ•  ๋•Œ๋„ ์†๋„๊ฐ€ ๋” ๋นจ๋ผ์ง„ ๊ฒƒ์ด๋‹ค. ๊ทธ์— ๋ฐ˜ํ•ด, ๋‘ ๋ฒˆ์งธ ์ฝ”๋“œ๋Š” ๋ฐ์ดํ„ฐ ํฌ๊ธฐ๋ฅผ ๊ทธ๋Œ€๋กœ ๊ฐ€์ ธ๊ฐ€์„œ ํ†ต์‹ ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์†๋„๊ฐ€ ์ƒ๋Œ€์ ์œผ๋กœ ๋Š๋ฆด ์ˆ˜๋ฐ–์— ์—†๋Š” ๊ฒƒ์ด๋‹ค. 

์ด์ฒ˜๋Ÿผ ํ†ต์‹ ์„ ํ•˜๊ธฐ ์ „ ๋ฐ์ดํ„ฐ ํฌ๊ธฐ/๋ณต์žก๋„๋ฅผ ์ค„์—ฌ์ค€๋‹ค๊ฑฐ๋‚˜, ํ†ต์‹  ์ž์ฒด๋ฅผ ๊ฐ„์†Œํ™”ํ•œ๋‹ค๋ฉด ์†๋„ ์ €ํ•˜๋ฅผ ๋ง‰์„ ์ˆ˜ ์žˆ๋‹ค. ์ด๋Ÿฐ ์š”์†Œ๋“ค์„ ์ƒ๊ฐํ•˜๋ฉฐ ํ”„๋กœ๊ทธ๋žจ์„ ์ง ๋‹ค๋ฉด ๋ถ„์‚ฐ/๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ๋ฅผ ๋” ํšจ์œจ์ ์œผ๋กœ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค. 

 

 

 

 

๋ถ„์‚ฐ/๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ ์‹œ ์ฃผ์˜ํ•  ์ ์„ ์‚ดํŽด๋ณด์•˜๋‹ค. 

๋‹ค์Œ ํฌ์ŠคํŒ…์€ Key-Value RDD์— ๋Œ€ํ•ด ๋‹ค๋ค„๋ณด๋„๋ก ํ•˜๊ฒ ๋‹ค.