๐Ÿ“’ Today I Learn/๐Ÿ Python

Spark๋ฅผ ์ด์šฉํ•œ ๋น…๋ฐ์ดํ„ฐ ๋ถ„์„ (2)

ny:D 2024. 7. 17. 21:40

240717 Today I Learn

๋ณ‘๋ ฌ์ฒ˜๋ฆฌ์™€ ๋ถ„์‚ฐ์ฒ˜๋ฆฌ

๋ณ‘๋ ฌ์ฒ˜๋ฆฌ vs. ๋ถ„์‚ฐ์ฒ˜๋ฆฌ

  • ๋ณ‘๋ ฌ์ฒ˜๋ฆฌ : ์—ฌ๋Ÿฌ๊ฐœ์˜ core์—์„œ ๋™์‹œ ๋‹ค๋ฐœ์ ์œผ๋กœ ์ผ์„ ๋‚˜๋ˆ„์–ด์„œ ์ฒ˜๋ฆฌ
    • Multiprocessing์ด๋‚˜ joblib์ด ํ”ํžˆ ์‚ฌ์šฉ.
    • sklearn์˜ njobs๊ฐ€ ์ด๋ฅผ ์ œ์–ดํ•˜๋Š” ๊ธฐ๋Šฅ.
  • ๋ถ„์‚ฐ์ฒ˜๋ฆฌ : ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ์—ฐ๊ฒฐ๋œ ์—ฌ๋Ÿฌ ๋Œ€์˜ ์ปดํ“จํ„ฐ(๋…ธ๋“œ)๊ฐ€ ๊ฐ๊ฐ์˜ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ
    • Spark๋ฅผ ํฌํ•จํ•ด Ray, Dask ๋“ฑ์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ.

๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ vs Vectorize

๐Ÿ’ก ํ•œ ๊ธฐ๊ธฐ์˜ ๋ฉ”๋ชจ๋ฆฌ ์•ˆ์—์„œ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•œ ๊ทœ๋ชจ๋ผ๋ฉด, ๊ตณ์ด Spark๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค๋Š” ์—ฐ์‚ฐ์„ ์ตœ์ ํ™”ํ•˜๋Š” ๊ฒƒ์ด ๋” ๋‚ซ๋‹ค.
  • Numpy(Pandas ํฌํ•จ)๋Š” ๋ฒกํ„ฐํ™” ์—ฐ์‚ฐ์„ ํ†ตํ•ด ๋‹จ์ˆœ ๋ฐ˜๋ณต์ž‘์—…์„ ๊ต‰์žฅํžˆ ๋น ๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Œ.
  • ์ŠคํŒŒํฌ์—์„œ๋„ ๊ฐœ๋ณ„ ๋จธ์‹ ์€ ๋ฒกํ„ฐํ™”๋ฅผ ์ˆ˜ํ–‰ํ•˜์—ฌ ์†๋„๋ฅผ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ์Œ.

๋ณ‘๋ ฌ์ฒ˜๋ฆฌ์˜ ๊ธฐ์ˆ 

  • Pickling & Job broker
    • ๋ถ„์‚ฐ/๋ณ‘๋ ฌ์ฒ˜๋ฆฌ ๋„๊ตฌ๋“ค์€ ๋‚ด๋ถ€์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ Picklie๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์†ก์ˆ˜์‹ 
    • ๋˜ํ•œ ์–ด๋–ค ํ”„๋กœ์„ธ์„œ์— ์–ด๋–ค ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด๊ณ , ์–ด๋–ค ์ž‘์—…์„ ์‹œํ‚ฌ ๊ฒƒ์ด๋ฉฐ, ์–ด๋–ป๊ฒŒ ์ทจํ•ฉํ•  ๊ฒƒ์ธ์ง€์— ๋Œ€ํ•œ ๋งค๋‹ˆ์ €๊ฐ€ ํ•„์š”ํ•˜๋ฉฐ, ์ด๋ฅผ Job broker๋ผ๊ณ  ํ•จ
      → ์ŠคํŒŒํฌ์—์„œ๋Š” ํด๋Ÿฌ์Šคํ„ฐ ๋งค๋‹ˆ์ €Cluster Manager๊ฐ€ Yarn, Mesos, Kube ๋“ฑ์„ ์ด์šฉ
  • ์Šค๋ ˆ๋“œ์™€ ํ”„๋กœ์„ธ์Šค
    • ์Šค๋ ˆ๋“œ : ๊ฐ™์€ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ๊ณต์œ 
    • ํ”„๋กœ์„ธ์Šค : ๋…๋ฆฝ๋œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„
      →  ํŒŒ์ด์ฌ์€ ๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์‹ฑ์ด ์ผ๋ฐ˜์ 
  • Joblib : ๋ณ‘๋ ฌ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ํŒŒ์ด์ฌ ํŒจํ‚ค์ง€
    • Sklearn์˜ ๊ฒฝ์šฐ ๋‚ด๋ถ€์—์„œ joblib์„ ์‚ฌ์šฉ
    • k๊ฐœ์˜ ๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์‹ฑ์„ ํ•  ๋•Œ k๊ฐœ ์™„๋ฃŒ ๋˜์–ด์•ผ ๋‹ค์Œ ์ˆœํšŒ๋กœ ๋„˜์–ด๊ฐ€ ์•ฝ๊ฐ„์˜ ๋น„ํšจ์œจ ๋ฐœ์ƒ ๊ฐ€๋Šฅ → ๋Œ€์•ˆ์œผ๋กœ๋Š” multiprocessing ํŒจํ‚ค์ง€๋„ ๋งŽ์ด ์‚ฌ์šฉ

Spark๋ฅผ ํ”ผํ•˜๋Š” ๋ฐฉ๋ฒ•

์ƒ˜ํ”Œ๋ง

"์ „์ฒด ๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ๋‹ค๋ฉด, ์ผ๋ถ€์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์ž‘์—…ํ•œ๋‹ค."

  • Random Sampling : ๋žœ๋ค์œผ๋กœ ์ƒ˜ํ”Œ๋ง 
    → ํ‘œ๋ณธ์ด ์šฐ์—ฐํžˆ ํŽธํ–ฅ๋  ์ˆ˜๋„ ์žˆ๊ณ  ๋งค๋ฒˆ ๊ฒฐ๊ณผ๊ฐ€ ๋‹ฌ๋ผ์ง„๋‹ค๋Š” ๋ฌธ์ œ์ ์ด ์žˆ์Œ.
  • Stratified Sampling : ์ผ์ • ๋น„์œจ์„ ๋งž์ถ”์–ด ์ƒ˜ํ”Œ๋ง ํ•˜๋Š” ๊ฒƒ
    → ์—ฌ์ „ํžˆ ๋งค๋ฒˆ ๊ฒฐ๊ณผ๊ฐ€ ๋‹ฌ๋ผ์ง„๋‹ค๋Š” ๋ฌธ์ œ์ ์ด ์žˆ์Œ.
  • Systematic Sampling : ํŒจํ„ด์ด ์—†๊ฑฐ๋‚˜ ์ˆœ์„œ์˜ ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๋Š” ์นผ๋Ÿผ์„ ๊ธฐ์ค€์œผ๋กœํ•จ.
    • ํŒจํ„ด์ด ์žˆ๋Š”์ง€ ๊ฒ€์‚ฌํ•ด๋ณด๋Š” ๊ณผ์ •์ด ํ•„์š”
    • ๊ฑด๋„ˆ๋›ฐ๋Š” ๋‹จ์œ„๋Š” ์†Œ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ํŠน์ • ํŒจํ„ด์„  ํ”ผํ•˜๊ธฐ์— ์ข‹์Œ.

๋ถ„ํ•  ์ฒ˜๋ฆฌ

"๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ถ€์กฑํ•˜๋‹ค๋ฉด 1/n๋กœ ์ž‘์—…์„ ๋‚˜๋ˆ„์–ด์„œ ์ˆ˜ํ–‰"

  • ๋ฐ์ดํ„ฐ๊ฐ€ ์™„๋ฒฝํžˆ ๋ถ„ํ• ๋˜๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉ ๊ฐ€๋Šฅ ← ์†Œ์…œ๋„คํŠธ์›Œํฌ์™€ ๊ฐ™์€ ๊ทธ๋ž˜ํ”„ ๋ฐ์ดํ„ฐ๋Š” ๋ถ„ํ• ์ด ์–ด๋ ค์›€.
  • ๊ฐ ํŒŒํ‹ฐ์…˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์™€, ํ•„์š”ํ•œ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•œ ๋’ค ์ตœ์ข… ๊ฒฐ๊ณผ๋งŒ์„ ์ง‘๊ณ„ํ•˜์—ฌ ์ €์žฅ
    • ์ „์ฒด ๋ฐ์ดํ„ฐ > ์ง‘๊ณ„๋œ ๋ฐ์ดํ„ฐ
    • ์ผ์ • ์ˆ˜์ค€ ์ด์ƒ์˜ ์ƒ์„ธํ•จ์€ ๋‚จ๊ฒจ์ค˜์•ผ ์ถ”ํ›„ ์—๋Ÿฌ๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์ข‹์Œ.

Dask

"๋ถ„์‚ฐ์ฒ˜๋ฆฌ ๋„๊ตฌ๋กœ Spark ๋ณด๋‹ค ๊ฐ€๋ณ๊ฒŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ"

  • Dask๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด NumPy, Pandas ๋ฐ sklearn๊ณผ ๊ฐ™์€ Python ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‰ฝ๊ฒŒ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Œ.
  • Dask Dataframe์„ Pandas์™€ ์œ ์‚ฌํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋น„๊ต์  ํ•™์Šต ๋‚œ์ด๋„๋„ ๋˜ํ•œ ๋‚ฎ์Œ.
  • Spark์™€ ์œ ์‚ฌํ•œ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง
  • ์‹ฑ๊ธ€ ๋จธ์‹ ์œผ๋กœ ํฐ ํŒŒ์ผ์„ ์ฝ์„ ๋•Œ ์œ ์šฉํ•จ.
    → parquet์—์„œ ์ผ๋ถ€ ์นผ๋Ÿผ์„ ์ฝ๊ฑฐ๋‚˜, csv์—์„œ ์ผ๋ถ€ row๋งŒ ์ฝ๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ์ง€๋งŒ dask๋กœ ํŒŒ์ผ์„ ์ชผ๊ฐœ๋Š” ๊ฒƒ์ด ํŽธ๋ฆฌ

์ž๋™ํ™”

Batch vs Streaming

  • batch job : ์ฃผ๊ธฐ์ ์ธ ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ
    → ๋ฐ์ดํ„ฐ ๋ถ„์„๊ฐ€์˜ ์—…๋ฌด๋Š” batch job์ธ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Œ.
  • streaming job : ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ฐœ์ƒํ•˜๋Š” ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ

Cron์„ ์ด์šฉํ•œ ์Šค์ผ€์ค„๋ง

  • ๊ฐ€์žฅ ์‰ฝ๊ณ  ๋‹จ์ˆœํ•œ ์Šค์ผ€์ฅด๋ง ๋„๊ตฌ๋กœ ์†Œํ”„ํŠธ์›จ์–ด ์ด๋ฆ„์ธ ๋™์‹œ์—, ์Šค์ผ€์ฅด๋ง ํ‘œํ˜„์‹์˜ ์ด๋ฆ„

  • ๋‹จ์  → ๊ทœ๋ชจ ์žˆ๋Š” ํšŒ์‚ฌ์—์„œ๋Š” Airflow๋‚˜ Jenkins๋ฅผ ๋งŽ์ด ์‚ฌ์šฉ
    • job์ด ์‹คํŒจํ•  ๊ฒฝ์šฐ, ๋”ฐ๋กœ ์•Œ๋žŒ์ด ์˜ค์ง€๋Š” ์•Š์Œ.
      → ๋”ฐ๋กœ ์•Œ๋žŒ์„ ์„ธํŒ…ํ•˜๋”๋ผ๋„, OOM ๋“ฑ์œผ๋กœ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ฉˆ์ถ”๋ฉด ์•„์˜ˆ ๋ ˆํฌํŒ…์ด ์•ˆ๋จ.
    • ์„œ๋ฒ„ ์ž์ฒด๊ฐ€ ์ฃฝ์€ ๊ฒฝ์šฐ, ํ™•์ธํ•˜๊ธฐ ์–ด๋ ค์›€.
    • ๋กœ๊ทธ๋ฅผ ์ œ์™ธํ•˜๋ฉด ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ํŒŒ์•…ํ•˜๊ธฐ ์–ด๋ ค์›€.
    • GUI๋ฅผ ๋”ฐ๋กœ ์ œ๊ณตํ•˜์ง€ ์•Š์Œ.
    • ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ์„ ํฌํ•จํ•œ ์ž์› ๊ด€๋ฆฌ๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์Œ.

๋ชจ๋‹ˆํ„ฐ๋ง๊ณผ ํžˆ์Šคํ† ๋ฆฌ ๊ด€๋ฆฌ

  • ๋ชจ๋‹ˆํ„ฐ๋ง : ์ฃผ๊ธฐ์ ์ธ batch job์ด ์ˆ˜ํ–‰๋˜์ง€ ์•Š์•˜์„ ๋•Œ ์•Œ๋ฆผ์ด ์˜ค๋„๋ก ํ•˜๋Š” ๊ฒƒ.
    → ๋ณดํ†ต ์Šฌ๋ž™ ๋“ฑ์˜ ์•ฑ์„ ์ด์šฉ ์•Œ๋ฆผ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์Œ.
  • ์ฝ”๋“œ ๋‹จ์—์„œ ์–ด๋–ป๊ฒŒ ์ž‘์—…์ด ์ˆ˜ํ–‰๋˜์—ˆ๋Š”์ง€ ๊ธฐ๋ก(logging)ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•จ.