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