Spark Tuning
Data Serialization, Memory Tuning, Garbage Collection Tuning
Data Serialization
๊ฐ์ฒด๋ฅผ ์ง๋ ฌํํ ๋ ๋๋ฌด ๋๋ฆฌ๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฒด ์ฑ๋ฅ์ด ํฌ๊ฒ ์ ํ๋ ์ ์๋ค. Spark ์ ๊ฐ์ ๋ถ์ฐ ํ๊ฒฝ์์ ๋ฐ์ดํฐ ์ง๋ ฌํ๋ ์ฑ๋ฅ์ ๋ง์ ์ํฅ์ ๋ฏธ์น๋ค.
Spark๋ ์์ปค ๋ ธ๋๋ค ์ฌ์ด์ ๋ฐ์ดํฐ๋ฅผ ์ ํ๋ง ํ ๋, ํน์ RDD๋ฅผ ๋์คํฌ์ ์ ์ฅํ ๋ ์ง๋ ฌํํ๋ค. Spark๋ ์ง๋ ฌํ ์ฑ๋ฅ ํฅ์์ ์ํด Kryo Serializer(ํฌ๋ฆฌ์ค ์ง๋ ฌํ)๋ฅผ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, Java Serializer ์ฌ์ฉํ ๋ ๋ณด๋ค 10๋ฐฐ ์ด์ ์ฑ๋ฅ ํฅ์์ด ๊ฐ๋ฅํ๋ค. Kryo Serializer ์ฌ์ฉํ๋ ค๋ฉด Spark ์ค์ ํ์ผ์์ Kryo ์ง๋ ฌํ ์ค์ ํ๋ฉด ๋๋ค.
Kyro ์ฌ์ฉ ์ค์
Kryo์ ์ฌ์ฉ์ ํด๋์ค ๋ฑ๋ก Kryo Serializer๋ ์ ์ฒด ํด๋์ค ์ด๋ฆ์ ์ ์ฅํ๊ธฐ ๋๋ฌธ์ ์์ ๋ญ๋น๊ฐ ์ฌํ๋ฏ๋ก ์ฌ์ฉ์๊ฐ ์ํ๋ ํด๋์ค๋ฅผ ๋ฑ๋กํด์ ์ ์ฅํด์ผ ํ๋ค.
Memory Tuning
์ง๋ ฌํ๋ฅผ ์ ์ํํ๋ฉด ๋ฉ๋ชจ๋ฆฌ ์ต์ ํ์๋ ๋์์ด ๋๋ค. Spark Storage Level ์ค์ ์ StorageLevel.MEMORY_ONLY_SER ๋ก ์ค์ ํ๋ฉด ๋ฐ์ดํฐ๋ฅผ ์ง๋ ฌํํด์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํ ์ ์๋ค. RDD ํํฐ์ ์ ๋ฐ์ดํธ ๋ฐฐ์ด ํ๋๋ก ๋ง๋ค์ด ์ ์ฅํ๊ธฐ ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ์ค์ผ ์ ์๋ค.
ํ์ง๋ง ๋ฐ์ดํฐ๋ฅผ ์ง๋ ฌํํ๋ฉด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ค์ผ ์๋ ์์ผ๋, ๋ฐ์ดํฐ์ ์ ๊ทผํ ๋ ์ญ์ง๋ ฌํ ํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ ์ ๊ทผ ์๊ฐ์ด ๋ ์ค๋ ๊ฑธ๋ฆด ์ ์๋ค.
๊ธฐ๋ณธ Storage Level์ StorageLevel.MEMORY_ONLY ๋ฅผ ์ฌ์ฉํ๋ฉฐ, RDD๋ฅผ ์ญ์ง๋ ฌํํ์ฌ JVM์ ์ ์ฅํ๋ค.
Garbage Collection Tuning
Java ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ๋ณดํ๊ธฐ ์ํด ์ฃผ๊ธฐ์ ์ผ๋ก ์ค๋๋ ๊ฐ์ฒด๋ฅผ ์ถ์ ํด์ ์ ๊ฑฐํ๋ GC ์์ ์ ์ํํ๋๋ฐ, ์ด ๊ณผ์ ์์ GC ์ค๋ฒํค๋๊ฐ ๋ฐ์ํ๋ค.
GC ๋น์ฉ์ ๋ฎ์ถ๋ ๋ฐฉ๋ฒ์๋ ํฌ๊ฒ ๋๊ฐ์ง๊ฐ ์๋ค.
์ฒซ๋ฒ์งธ๋ GC ๋น์ฉ์ด Java ๊ฐ์ฒด ์์ ๋น๋กํ๊ธฐ ๋๋ฌธ์ ๊ฐ์ฒด ์๋ฅผ ์ค์ด๋ฉด GC ๋น์ฉ์ ๋ฎ์ถ ์ ์๋ค. ๋๋ฒ์งธ๋ ๊ฐ์ฒด๋ฅผ ์ง๋ ฌํํด์ ์ ์ฅํ๋ฉด RDD ํํฐ์ ๋ง๋ค ๋ฐ์ดํธ ๋ฐฐ์ด ๊ฐ์ฒด ํ๋๋ก ๋ง๋ค ์ ์๋ค.
GC ๊ฐ ๋ฌธ์ ๊ฐ ๋๋์ง ๋๋ฒ๊น ํ๋ ค๋ฉด Spark ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํ ๋ Java ์ต์ ์ -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamp ์ค์ ํ๋ฉด GC๊ฐ ๋ฐ์ํ ๋ ๋ง๋ค ๋ก๊ทธ๋ฅผ ์ถ๋ ฅํ ์ ์๋ค.
GC ๋๋ฒ๊น
์ต์
GC ๋ฌธ์ ๋ฅผ ์ ๊ฒํ๊ณ ์ต์ ํํ๋ ๋ฐฉ๋ฒ์ ํฌ๊ฒ 2๊ฐ์ง ๋ฐฉ๋ฒ์ด ์๋ค.
Full GC ๊ฐ ๋ฐฐ์น ์์ ์๋ฃ ์ ์ ์ฌ๋ฌ๋ฒ ์ผ์ด๋๋ค๋ฉด ์์ ์ ์คํํ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ถ์กฑํ๋ค๋ ๊ฒ์ด๋ค.
Heap์ OldGen ์ด ๊ฑฐ์ ๊ฝ ์ฐผ๋ค๋ฉด ์บ์ฌ ๋ฉ๋ชจ๋ฆฌ ํฌ๊ธฐ๋ฅผ ์ค์ฌ๋ผ. ์์ ์ด ๋๋ ค์ง๋ ๊ฒ๋ณด๋ค ์บ์ฌ๋ฅผ ๋ ์ ๊ฒ ํ๋ ๊ฒ์ด ๋ ์ ๋ฆฌํ๋ค.
์ฐธ๊ณ ์๋ฃ
http://spark.apache.org/docs/latest/tuning.html https://github.com/apache/spark/blob/master/core/src/test/scala/org/apache/spark/SparkConfSuite.scala https://ogirardot.wordpress.com/2015/01/09/changing-sparks-default-java-serialization-to-kryo/ http://helloworld.naver.com/helloworld/textyle/1329
Last updated
Was this helpful?