๐Ÿ“’ Spark(17)

Kimdongkiยท2024๋…„ 7์›” 9์ผ

Spark

๋ชฉ๋ก ๋ณด๊ธฐ
17/22

๐Ÿ“Œ JVM๊ณผ Python ๊ฐ„์˜ ํ†ต์‹ 

PySpark Driver

  • Python ํ”„๋กœ์„ธ์Šค + JVM ํ”„๋กœ์„ธ์Šค
  • ์‹ค์ œ SparkContext๋Š” JVM์ชฝ์—์„œ ์ƒ์„ฑํ•œ๋‹ค.

PySpark Memory

  • Spark์€ JVM Application์ด์ง€๋งŒ PySpark์€ Python ํ”„๋กœ์„ธ์Šค์ด๋‹ค.
    -> JVM์—์„œ ๋ฐ”๋กœ ๋™์ž‘ํ•˜์ง€ ๋ชปํ•˜๊ธฐ ๋•Œ๋ฌธ์— JVM ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.

  • Spark.executor.pyspark.memory(Pythonํ”„๋กœ์„ธ์Šค)

  • Spark.python.worker.memory(Py4J)

  • Executor์•ˆ์— 2๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์กด์žฌํ•œ๋‹ค.

    • JVM ํ”„๋กœ์„ธ์„œ
    • Python Worker
  • ์ด ๋‘˜๊ฐ„์— ์˜ค๋ธŒ์ ํŠธ Serialization/deserialization์„ ํ•˜๋Š” ๊ฒƒ์ด Py4J์˜ ์—ญํ• ์ด๋‹ค.

  • spark.executor.pyspark.memory

    • PySpark์€ ๊ธฐ๋ณธ์ ์œผ๋กœ overhead memory๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ์ด ํ™˜๊ฒฝ๋ณ€์ˆ˜๊ฐ€ ์‚ฌ์šฉ๋˜๋ฉด PySpark์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ๋Š” ์ด ํ™˜๊ฒฝ๋ณ€์ˆ˜์˜ ๊ฐ’์œผ๋กœ ๊ณ ์ •๋œ๋‹ค.
    • ์ด๋Š” ์‚ฌ์‹ค PySpark์ด ์™ธ๋ถ€ ํŒŒ์ด์ฌ ํ•จ์ˆ˜๋ฅผ ์“ฐ๋Š” ๊ฒฝ์šฐ์—๋งŒ ํ•„์š”ํ•˜๋‹ค.(๊ธฐ๋ณธ์ ์œผ๋กœ๋Š” ์„ธํŒ…๋˜์ง€ ์•Š๋Š”๋‹ค.)
  • spark.python.worker.memory

    • default ๊ฐ’์€ 512MB์ด๋‹ค.
    • JVM๊ณผ Python ํ”„๋กœ์„ธ์Šค๊ฐ„์˜ ํ†ต์‹ ์„ ๋‹ด๋‹นํ•˜๋Š” Py4J๊ฐ€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ์˜ ์–‘
    • ์ด ํฌ๊ธฐ๋ฅผ ๋„˜์–ด๊ฐ€๋ฉด ๋””์Šคํฌ๋กœ Spill์ด ๋ฐœ์ƒํ•œ๋‹ค.
  • spark.executor.pyspark.memory๋Š” ํŒŒ์ด์ฌ ํ”„๋กœ์„ธ์Šค์˜ ์‚ฌ์šฉ ๋ฉ”๋ชจ๋ฆฌํฌ๊ธฐ๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค.

  • spark.python.worker.memory๋Š” JVM์—์„œ ์‚ฌ์šฉ๋˜๋Š” Python ์˜ค๋ธŒ์ ํŠธ๋“ค์˜ ์ตœ๋Œ€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค.

Spark๊ณผ Python๊ฐ„์˜ ํ†ต์‹ 

  • Py4J : Python๊ณผ JVM๊ฐ„์˜ ๋ฐ์ดํ„ฐ ๊ตํ™˜์„ ํ†ตํ•ด ๋‘˜๊ฐ„์˜ ์—ฐ๋™์„ ๋„์™€์ฃผ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ

  • DataFrame/RDD ์—ฐ์‚ฐ์ค‘์— Python ์ฝ”๋“œ๊ฐ€ ์‚ฌ์šฉ๋œ๋‹ค๋ฉด?
    -> ์ด๋Š” ๋ณ„๋„์˜ Python ํ”„๋กœ์„ธ์Šค๋ฅผ ํ†ตํ•ด ์‹คํ–‰๋˜๋ฉฐ ์ด ๊ฒฝ์šฐ ํŒŒํ‹ฐ์…˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ชจ๋‘ ๋„˜์–ด๊ฐ„๋‹ค.

df.select("foo", "bar").where(df["foo" > 100).count()

vs.

from operator import add
t = spark.sparkContext.parallelize(range(len))
a = t.reduce(add)
  • ๋“œ๋ผ์ด๋ฒ„์—์„œ ์œ„์˜ Pythonํ”„๋กœ์„ธ์Šค์—์„œ ์‹คํ–‰ํ•  ์ฝ”๋“œ์™€ ๊ธฐํƒ€ ๋ฐ์ดํ„ฐ๋ฅผ serializeํ•ด์„œ Executor์— ์ „์†กํ•œ๋‹ค.
  • JVM executor๋Š” Python ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.(PySpark Script)
  • Executor๋Š” ์ด๊ฒƒ๊ณผ Partition์„ Serializeํ•˜๊ณ  ์œ„์—์„œ ๋ฐ›์€ ์ฝ”๋“œ์™€ ํ•จ๊ป˜ Python ํ”„๋กœ์„ธ์Šค๋กœ ์ „์†กํ•œ๋‹ค.
  • Python ํ”„๋กœ์„ธ์Šค์—์„œ ๊ณ„์‚ฐ์ด ๋๋‚˜๋ฉด ๊ฒฐ๊ณผ๊ฐ€ ๋‹ค์‹œ Executor๋กœ Serialize๋˜์–ด์„œ ์ „์†ก๋œ๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€