
๐ Spark UI ๋ณ๋ชฉ ์ฐพ๋ ์์ (์ด๋๋ก ๋ณด๋ฉด ๋จ)
0๏ธโฃ ํ ์ค ์์ฝ
๐ Stages → Tasks → Shuffle → Executors
์ด ์์๋ก ๋ณด๋ฉด 90% ๋ณ๋ชฉ ์ฐพ์
1๏ธโฃ Jobs ํญ – “์ด๋์ ์ค๋ ๊ฑธ๋ ธ๋?”
๋จผ์ ๋ณด๋ ๊ฒ
- Job ์คํ ์๊ฐ
- ์ด๋ค Job์ด ์ ๋ ๊น?
๐ ์ ์ผ ์ค๋ ๊ฑธ๋ฆฐ Job ํ๋๋ฅผ ๊ณ ๋ฅธ๋ค
2๏ธโฃ Stages ํญ – โญ ํต์ฌ
์ฌ๊ธฐ์ ๊ฑฐ์ ๋ค ๋ณด์ธ๋ค
์ฒดํฌ ํฌ์ธํธ
- Stage ์คํ ์๊ฐ
- Shuffle Read / Write ์๋ Stage
- Stage ๊ฐ์ (๋๋ฌด ๋ง๊ฑฐ๋ ์ ์์ง)
๐ ์๊ฐ ๋ง์ด ๋จน๋ Stage = ๋ณ๋ชฉ ํ๋ณด
โ ๏ธ ํํ Stage ๋ณ๋ชฉ ํจํด
- Exchange, Sort, Aggregate
- join ์งํ Stage
๐ ๋๋ถ๋ถ shuffle ๋ฌธ์
3๏ธโฃ Tasks ํญ – “๋ช ๊ฐ๊ฐ ๋๋ฆฐ๊ฐ?”
Stage ํด๋ฆญ → Tasks ๋ณด๋ฉด ๐
๋ด์ผ ํ ๊ฒ
- Task Duration ๋ถํฌ
- ๋ช ๊ฐ Task๋ง ์ ๋ ๊น? (๊ผฌ๋ฆฌ ๊ธธ๋ฉด ๋ฌธ์ )
์๋ฏธ
- Task ์๊ฐ ๊ณ ๋ฅด์ง ์์
- → ๋ฐ์ดํฐ ์คํ(skew) ๊ฐ๋ฅ์ฑ
๐ ํน์ key์ ๋ฐ์ดํฐ ๋ชฐ๋ฆผ
4๏ธโฃ Shuffle Read / Write – ์ง์ง ๋ฒ์ธ
Shuffle Read๊ฐ ํฌ๋ฉด?
- join / groupBy ๊ณผ๋ค
- partition ์ ๋ถ์กฑ
Shuffle Write๊ฐ ํฌ๋ฉด?
- repartition ๋จ๋ฐ
- unnecessary shuffle
๐ Spark ๋ณ๋ชฉ์ 70%๋ shuffle
5๏ธโฃ Executors ํญ – ๋ฆฌ์์ค ๋ณ๋ชฉ ํ์ธ
์ฒดํฌ๋ฆฌ์คํธ
- Executor CPU ์ฌ์ฉ๋ฅ
- Memory ์ฌ์ฉ๋
- GC Time ๋น์จ
์ํ ์ ํธ
- GC Time ๋น์ค ํผ
- Executor ์์ฃผ ์ฃฝ์
- Task ์คํจ ๋ฐ๋ณต
๐ ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ / ์บ์ ๊ณผ๋ค
6๏ธโฃ Storage ํญ – cache ๋ฌธ์ ์ฐพ๊ธฐ
ํ์ธ
- cache๋ DataFrame ์์?
- ๋ฉ๋ชจ๋ฆฌ ์ ์ ์จ ๊ณผ๋ค?
๐ cache ํ๋๋ฐ ํ ๋ฒ๋ง ์ฐ๋ฉด
→ ์คํ๋ ค ๋ณ๋ชฉ
๐ง ๋ณ๋ชฉ ์ ํ๋ณ ๋น ๋ฅธ ์ง๋จํ
์ฆ์ ์์ธ ๋์
| Stage ์๊ฐ ๊น | shuffle ๊ณผ๋ค | join/partition ์ ๊ฒ |
| Task ๋ช ๊ฐ๋ง ๊น | ๋ฐ์ดํฐ ์คํ | salting, repartition |
| GC Time ํผ | ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ | cache ์ ๊ฑฐ, memory ์ฆ๊ฐ |
| Executor idle | partition ๋ถ์กฑ | repartition ์ฆ๊ฐ |
| Executor ๊ณผ๋ถํ | partition ๊ณผ๋ค | coalesce |
๐ฅ ์ค๋ฌด์์ ์ ์ผ ์์ฃผ ๋ณด๋ ๋ณ๋ชฉ TOP 3
1๏ธโฃ Join + Shuffle
- ํด๊ฒฐ: broadcast join, join key ์ ๊ฒ
2๏ธโฃ Partition ์ ์ ๋ง์
- ๋๋ฌด ์ ์ → CPU ๋์
- ๋๋ฌด ๋ง์ → ์ค๋ฒํค๋
3๏ธโฃ ๋ฌด์ง์ฑ cache
- cache → unpersist ์ ํจ
๋ฉด์ ์ฉ 30์ด ๋ต๋ณ (์ด๊ฑฐ ์ธ์๋ ๋จ)
“Spark UI์์๋ ๋จผ์ Stages ํญ์์
์คํ ์๊ฐ์ด ๊ธด Stage๋ฅผ ํ์ธํ๊ณ ,
Shuffle Read/Write ์ฌ๋ถ๋ฅผ ๋ด ๋๋ค.
์ดํ Tasks ๋ถํฌ๋ก ๋ฐ์ดํฐ ์คํ๋ฅผ ํ์ธํ๊ณ ,
Executors ํญ์์ CPU·๋ฉ๋ชจ๋ฆฌ·GC๋ฅผ ์ ๊ฒํด
๋ฆฌ์์ค ๋ณ๋ชฉ์ธ์ง ํ๋จํฉ๋๋ค.”
๋ง์ง๋ง ํต์ฌ ๋ฌธ์ฅ
๐ Spark ๋ณ๋ชฉ =‘shuffle + partition + memory’ ์ค ํ๋๋ค.
'DataEngineering > Spark' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| Spark ์ต์ ํ ์ฒดํฌ๋ฆฌ์คํธ (0) | 2026.01.30 |
|---|---|
| Suffle์ด๋? (1) | 2026.01.30 |
| df.cache() ๋ฅผ ์ธ์ ์จ์ผํ๋? (0) | 2026.01.30 |
| Dataframe ์ด๋? (0) | 2026.01.30 |
| Lazy Evaluation ์ด๋? (0) | 2026.01.30 |