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์ ๋ํด ๋ค๋ค๋ณด๋๋ก ํ๊ฒ ๋ค.
'๐ Data Engineering > Apache Spark' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Spark] Transformations & Actions ํจ์ (0) | 2022.05.01 |
---|---|
[Spark] Key-Value RDD ๊ฐ๋ ๋ฐ ์ฝ๋ (0) | 2022.05.01 |
[Spark] RDD ๊ฐ๋ ๋ฐ ์ฝ๋ (0) | 2022.04.24 |
[Spark] Apache Spark ๊ฐ๋ ๋ฐ ๋ฒ์ (0) | 2022.04.23 |
[Spark] ์ด๊ธฐ ํ๊ฒฝ ์ธํ ft. ํธํ ๋ฌธ์ ํด๊ฒฐ (0) | 2022.04.20 |