240718 Today I Learn
์คํํฌ์ ๊ธฐ๋ณธ ๊ตฌ์กฐ
Lazy Compuation
- Spark๋ ๋ฐ๋ก๋ฐ๋ก ์ฃผ์ด์ง ๋ณํTransformation์ ์ํํ์ง ์๊ณ , ์ฌ๋ฌ ๋ณํ๋ค์ ์ฐจ๊ณก์ฐจ๊ณก ์์๋ ๋ค, ํ ๋ฒ์ ์ต์ ํํ์ฌ ์ํ
- ๋ฏธ๋ฃจ์ด๋ ์ผ์ด ์์ธ ๊ฒ์ Lineage๋ผ๊ณ ํ๋๋ฐ, ์ ์ฒด ๋ณํ์ ๋ณด๊ณ ์ค๊ฐ์ ํ์์๋ ์ฐ์ฐ์ ์ ๊ฑฐํ๊ธฐ ์ํด ๊ณ ์์ ์ผ๋ก ์ด๋ฌํ ์ง์ฐ์ ๋ง๋๋ ๊ฒ์ด๋ค.
- ๋ณํ์ด ์์ธ Lineage๋ฅผ ์ํํ๋๋ก ๊ตฌ๋Triggerํ๋ ์์
๋ค์ Action์ด๋ผ๊ณ ํจ.
→ count, collect, take, top, show, write, toDF ๋ฑ
๋ถ์ฐ์ฒ๋ฆฌ์ Partition
- Partition : ๋ชจ๋ executer๊ฐ ๋ณ๋ ฌ๋ก ์ผํ ์ ์๋๋ก ์ชผ๊ฐ ๋ฐ์ดํฐ์ ๋จ์
- ํํฐ์
์ ์ง์ ์กฐ์ํด ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ํํฐ์
์ ๊ฐ์ ๋ก ๋ฐฐ์ ํ ์ ์์
→ high-level ์ค๊ณ๋ง ๊ฐ๋ฅ, ์ค์ ์ํ์ spark๊ฐ ์์์ ํจ - Repartition ์ ํตํด ์ฌ๊ตฌ์ฑ ๊ฐ๋ฅ
→ ํน์ ํํฐ์ ์ ๋ฉ๋ชจ๋ฆฌ ๋ถํ๊ฐ ์ฌํ๋ฉด OOM์ผ๋ก ์คํํฌ๊ฐ ์ข ๋ฃ๋ ์ ์์. - ํํฐ์
์ฌ์ด์ ๋ฐ์ดํฐ ํต์ (=๋คํธ์ํฌ ํต์ )์ ๋น์ผ ์ฐ์ฐ
→ ๊ฐ๋ฅํ๋ฉด ํํฐ์ ๋ด๋ถ์์ ์ฐ์ฐ์ด ๊ฐ๋ฅํ๋๋ก ํ๊ธฐ
- ํํฐ์
์ ์ง์ ์กฐ์ํด ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ํํฐ์
์ ๊ฐ์ ๋ก ๋ฐฐ์ ํ ์ ์์
Spark ์์ ์ ์ํ๊ณผ์
- DataFrame ๋ฑ์ผ๋ก ์ฝ๋๋ฅผ ์์ฑ
- ์ด๋ฅผ ๋
ผ๋ฆฌ์ ์คํ ๊ณํ(Catalyst Optimizer)์ผ๋ก ๋ณํ
→ Driver์ Execute์ ์ ๋ณด๋ฅผ ๊ณ ๋ คํ์ง ์๊ณ , ๋ ผ๋ฆฌ์ ์ธ ๊ฐ๋ฅ์ฑ๋ง ์ฐธ์กฐ - ์คํํฌ๋ ๋
ผ๋ฆฌ์ ์คํ ๊ณํ์ ๋ฌผ๋ฆฌ์ ์คํ ๊ณํ์ผ๋ก ๋ณํํ๋ฉฐ, ๊ทธ ๊ณผ์ ์์ ์ถ๊ฐ์ ์ต์ ํ ๊ฐ๋ฅ ์ฌ๋ถ๋ฅผ ํ์ธ
→ ํ ์ด๋ธ์ ํฌ๊ธฐ์ ํํฐ์ ์ ๋ฑ์ ๊ณ ๋ ค - ํด๋ฌ์คํฐ์์ ๋ฌผ๋ฆฌ์ ์คํ ๊ณํ(RDD ์ฒ๋ฆฌ)๋ฅผ ์คํํฉ๋๋ค
๋๋ณด๊ธฐ
Spark ๋ฐ์ดํฐ ํ์
์คํํฌ ๊ตฌ๋ํ๊ธฐ
์คํํฌ ์ธ์
์คํํฌ ์ธ์
์ Spark Applications์ ๋ช
๋ น์ด์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌ.
→ PySpark์์๋ Sparksession์ ๋์ฐ๋ฉด์ Spark๋ฅผ ์์ํจ
## Session ์์ฑ
spark = (
SparkSession
.builder
.appName("First Session")
.getOrCreate()
)
spark
์คํํฌ ๊ฟํ
๋ธ๋ก๋ ์บ์คํธ
๐ก ๋ธ๋ก๋์บ์คํธ
- ๋ชจ๋ Worker์๊ฒ ํฐ ๊ท๋ชจ์ ์ ๋ ฅ ๋ฐ์ดํฐ์ ์ ํจ์จ์ ์ผ๋ก ์ ๊ณตํ ๋ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
- ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ๋ก ์ค ํ๋
- Numpy ๋ธ๋ก๋ ์บ์คํธ
- Spark ๋ธ๋ก๋ ์บ์คํธ
- ๋ชจ๋ Executor๊ฐ ์ ๊ทผ ๊ฐ๋ฅํ ๊ณตํต์ ๋ณ์
- ๋๋ฌด ํฐ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์คํ๋ ค ๋ถํ๊ฐ ์ฌํด์ง ์ ์์.
- spark.sparkContext.broadcast()๋ฅผ ์ด์ฉํ๊ฒ ๋จ.
- ๋ชจ๋ Executor๊ฐ ๊ณต์ ํ๋ ๊ทธ ๊ฐ์ด ๋ณํ ์ ์๋ ๊ฒ์ ์ดํ๋ฌผ๋ ์ดํฐ๋ผ ํฉ๋๋ค
Join
- Big to Big join(= ์
ํ ์กฐ์ธ) : ํฐ ํ
์ด๋ธ ๋ผ๋ฆฌ์ ์กฐ์ธ
- ๋ชจ๋ executer๊ฐ ๋ค๋ฅธ executer์ ํต์
- ๋ฐ์ดํฐ๊ฐ ์ด๋ป๊ฒ ๋ถํ ๋์ด์๋๋์ ๋ฐ๋ผ ํผ์ก๋๊ฐ ๋ฌ๋ผ์ง
- ๊ฐ๋ฅํ๋ฉด ํผํ๋๊ฒ ์ข์ → ์ด๋ป๊ฒํ๋ฉด ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ ์ ์์๊น๋ฅผ ๊ณ ๋ฏผ
- Big to Small join : ํ๋์ ํฐ ํ
์ด๋ธ๊ณผ ์์ ํ
์ด๋ธ์ ๋ณํฉ
- ์์ ํ ์ด๋ธ์ ๋ณต์ฌํด executer์ ๋ณด๋.
- ์ฒ์์๋ง ๋๊ท๋ชจ ํต์ ์ด ํ์ํ๊ณ , ์ดํ์๋ ๋ ธ๋๊ฐ ํต์ ์ด ๋ถํ์
- Small to Small join
- ๊ธฐํ join ํ
- ๋ฐ์ดํฐ๊ฐ ์ ๋ถํ ๋์ด์๋ค๋ฉด big to big ์กฐ์ธ๋ ๋น ๋ฅด๊ฒ ์ํ ๊ฐ๋ฅ (ํ์ง๋ง repartition ํ ์ ๋๋ ์๋)
- ์ด๋ค ์กฐ์ธ์ ํํฐ ์ญํ ์ ์ํํ๊ธฐ ๋๋ฌธ์ join ์์์ ๋ฐ๋ผ ์๋๊ฐ ๋ฌ๋ผ์ง ์ ์์.
๊ณ ๊ธ I/O
- inferschem : ์๋์ผ๋ก ๋ฐ์ดํฐ ํ์
์ ์ถ๋ก ํ์ง๋ง ๋ค์ ๋๋ฆฌ๊ณ ์๋ํ์ง ์์ ํ์
์ ํ ๋นํ ์๋ ์์
→ ์คํค๋ง๋ฅผ ๊ฐ์ ํ๋ ๊ฒ์ด ๋์ - Write option
- mode: overwrite๋ผ๊ณ ๋ช ์ํ์ง ์์ผ๋ฉด, ๊ธฐ์กด์ ํ์ผ์ด ์์ ๋ ์๋ฌ๊ฐ ๋จ.
- partitionBy: ์ด๋ค ์นผ๋ผ์ ๊ธฐ์ค์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ถํ ํด ์ ์ฅํ ์ง ๋ช ์
- maxPartitionBytes: ๋ถํ ๋ ํ์ผ์ ์ต๋ ํฌ๊ธฐ๋ฅผ ์กฐ์
- ETC
- ํ์ผ ํฌ๊ธฐ ๊ด๋ฆฌ ์ค์ (์ผ๋ฐ์ ์ผ๋ก 500MB ~ 2GB์ ํ)
- ์ฌ๋ฌ executer๊ฐ ๊ฐ์ ํ์ผ์ ๋์์ ์ฝ์ ์๋ ์์ง๋ง, ์ฌ๋ฌ ํ์ผ์ ๋์์ ์ฝ์ ์๋ ์์
- ๋ณตํฉ ๋ฐ์ดํฐ์ ํ(nested)์ ๋ชจ๋ ํ์ผ ํฌ๋งท์์ ์ ํฉํ์ง๋ ์์ผ๋ฏ๋ก ๊ถ์ฅ๋์ง ์์.
'๐ Today I Learn > ๐ Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Spark๋ฅผ ์ด์ฉํ ๋น ๋ฐ์ดํฐ ๋ถ์ (2) (0) | 2024.07.17 |
---|---|
Spark๋ฅผ ์ด์ฉํ ๋น ๋ฐ์ดํฐ ๋ถ์ (1) (1) | 2024.07.17 |
๋จธ์ ๋ฌ๋ ํน๊ฐ #3 ๊ตฐ์งํ(Clustering) (0) | 2024.06.15 |
๋จธ์ ๋ฌ๋ ํน๊ฐ #2 ํ๊ท(Regression) (0) | 2024.06.15 |
[๊ฐ์ธ ๊ณผ์ ] ๋จธ์ ๋ฌ๋ ๊ฐ์ธ๊ณผ์ (1) | 2024.06.13 |