ํ๋ธ๋ฅด, ์๋
ํ์ธ์! ์ด์
Spark ์ฌ์ฉ ๋ฐฉ๋ฒ์ ๋ํ ๊ฐ๋ตํ ์๊ฐ์
๋๋ค. XNUMX๊ฐ์ ํ๋ก๊ทธ๋จ์ด ์์ด์
์ฐ๋ฆฌ ์ฌ์ฉ์ ํน์ง์ Spark์์ ๋์์ ์์ ํ๋ ์ฌ๋๋ค์ ์๊ฐ ์ ์ฒด ๊ทธ๋ฃน๊ณผ ๋์ผํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค. ์๋ฅผ ๋ค์ด ์ธ๋ฏธ๋์์ ๋ชจ๋๊ฐ ๋์์ ๋ญ๊ฐ๋ฅผ ์๋ํ๊ณ ์ ์๋์ ๋ง์ ๋ฐ๋ผ ๋ฐ๋ณตํ๋ ๊ฒฝ์ฐ์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๊ฒ์ ๋ง์ง ์์ต๋๋ค. ๋๋ก๋ ์ต๋ 40๋ช ๊น์ง ๊ฐ๋ฅํฉ๋๋ค. ์๋ง๋ ์ด๋ฌํ ์ฌ์ฉ ์ฌ๋ก์ ์ง๋ฉดํ ํ์ฌ๋ ์ ์ธ๊ณ์ ์ผ๋ก ๋ง์ง ์์ ๊ฒ์ ๋๋ค.
๋ค์์ผ๋ก ํน์ ๊ตฌ์ฑ ๋งค๊ฐ๋ณ์๋ฅผ ์ ํํ ๋ฐฉ๋ฒ๊ณผ ์ด์ ๋ฅผ ์ค๋ช ํ๊ฒ ์ต๋๋ค.
์ฒ์๋ถํฐ ์์ํฉ์๋ค. Spark์๋ ํด๋ฌ์คํฐ์์ ์คํํ ์ ์๋ 3๊ฐ์ง ์ต์ (๋ ๋ฆฝํ, Mesos ์ฌ์ฉ, YARN ์ฌ์ฉ)์ด ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ๊ทธ๊ฒ์ด ํ๋นํ๊ธฐ ๋๋ฌธ์ ์ธ ๋ฒ์งธ ์ต์ ์ ์ ํํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค. ์ฐ๋ฆฌ๋ ์ด๋ฏธ hadoop ํด๋ฌ์คํฐ๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค. ์ฐ๋ฆฌ ์ฐธ๊ฐ์๋ค์ ์ด๋ฏธ ๊ทธ ์ํคํ ์ฒ์ ๋ํด ์ ์๊ณ ์์ต๋๋ค. YARN์ ์ฌ์ฉํด ๋ณด๊ฒ ์ต๋๋ค.
spark.master=yarn
๋์ฑ ๋ ํฅ๋ฏธ๋กญ์ต๋๋ค. ์ด๋ฌํ 3๊ฐ์ง ๋ฐฐํฌ ์ต์
์๋ ๊ฐ๊ฐ ํด๋ผ์ด์ธํธ์ ํด๋ฌ์คํฐ๋ผ๋ 2๊ฐ์ง ๋ฐฐํฌ ์ต์
์ด ์์ต๋๋ค. ๊ธฐ๋ฐ์ ๋
spark.deploy-mode=client
์ผ๋ฐ์ ์ผ๋ก ์ด์ ๋ถํฐ Spark๋ ์ด๋ป๊ฒ๋ YARN์์ ์๋ํ์ง๋ง ์ฐ๋ฆฌ์๊ฒ๋ ์ด๊ฒ๋ง์ผ๋ก๋ ์ถฉ๋ถํ์ง ์์์ต๋๋ค. ์ฐ๋ฆฌ๋ ๋น ๋ฐ์ดํฐ์ ๊ดํ ํ๋ก๊ทธ๋จ์ ๊ฐ๊ณ ์๊ธฐ ๋๋ฌธ์ ๋๋ก๋ ์ฐธ๊ฐ์๋ค์ด ์์์ ๊ท ๋ฑํ๊ฒ ๋ถํ ํ๋ ํ ๋ด์์ ์ป์ ๊ฒ์ด ์ถฉ๋ถํ์ง ์์ ๊ฒฝ์ฐ๊ฐ ์์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ๋ ํฅ๋ฏธ๋ก์ด ์ ์ ๋ฐ๊ฒฌํ์ต๋๋ค. ๋ฐ๋ก ๋์ ์์ ํ ๋น์ ๋๋ค. ๊ฐ๋จํ ๋งํด์ ์์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ์ด๋ ค์ด ์์ ์ด ์๊ณ ํด๋ฌ์คํฐ๊ฐ ๋น์ด ์๋ ๊ฒฝ์ฐ(์: ์์นจ) ์ด ์ต์ ์ ์ฌ์ฉํ๋ฉด Spark๋ฅผ ์ฌ์ฉํ์ฌ ์ถ๊ฐ ๋ฆฌ์์ค๋ฅผ ์ป์ ์ ์์ต๋๋ค. ๊ตํํ ๊ณต์์ ๋ฐ๋ผ ํ์์ฑ์ด ๊ณ์ฐ๋ฉ๋๋ค. ์์ธํ ๋ด์ฉ์ ๋ค๋ฃจ์ง ์๊ฒ ์ต๋๋ค. ์ ์๋ํฉ๋๋ค.
spark.dynamicAllocation.enabled=true
์ด ๋งค๊ฐ๋ณ์๋ฅผ ์ค์ ํ๋๋ฐ ์์ ์ Spark๊ฐ ์ถฉ๋ํ์ฌ ์์๋์ง ์์์ต๋๋ค. ๊ทธ๋ ์ฃ , ์ฝ์ด์ผ ํ๊ฑฐ๋ ์.
spark.shuffle.service.enabled=true
์ ํ์ํ๊ฐ์? ์์ ์ ๋ ์ด์ ๋ง์ ๋ฆฌ์์ค๊ฐ ํ์ํ์ง ์์ผ๋ฉด Spark๋ ํด๋น ๋ฆฌ์์ค๋ฅผ ๊ณตํต ํ๋ก ๋ฐํํด์ผ ํฉ๋๋ค. ๊ฑฐ์ ๋ชจ๋ MapReduce ์์ ์์ ๊ฐ์ฅ ์๊ฐ์ด ๋ง์ด ๊ฑธ๋ฆฌ๋ ๋จ๊ณ๋ Shuffle ๋จ๊ณ์ ๋๋ค. ์ด ๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํ๋ฉด ์ด ๋จ๊ณ์์ ์์ฑ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ์ด์ ๋ฐ๋ผ ์คํ๊ธฐ๋ฅผ ํด์ ํ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์คํ์๋ ์์ ์์ ๋ชจ๋ ๊ฒ์ ๊ณ์ฐํ๋ ํ๋ก์ธ์ค์ ๋๋ค. ํน์ ์์ ํ๋ก์ธ์ ์ฝ์ด์ ํน์ ์์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์์ต๋๋ค.
์ด ๋งค๊ฐ๋ณ์๊ฐ ์ถ๊ฐ๋์์ต๋๋ค. ๋ชจ๋ ๊ฒ์ด ์๋ํ๋ ๊ฒ ๊ฐ์์ต๋๋ค. ์ฐธ๊ฐ์๋ค์ด ์ค์ ๋ก ํ์ํ ๋ ๋ ๋ง์ ์์์ ์ ๊ณต๋ฐ์๋ค๋ ์ฌ์ค์ด ๋์ ๋๊ฒ ๋์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ ๋ค๋ฅธ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค. ์ด๋ ์์ ์์ ๋ค๋ฅธ ์ฐธ๊ฐ์๋ ๊นจ์ด๋ Spark๋ฅผ ์ฌ์ฉํ๊ณ ์ถ์์ง๋ง ๋ชจ๋ ๊ฒ์ด ๋ฐ๋น ์ ๋ถํํ์ต๋๋ค. ์ดํดํ ์ ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ๋ฌธ์๋ฅผ ๋ณด๊ธฐ ์์ํ์ต๋๋ค. ํ๋ก์ธ์ค์ ์ํฅ์ ๋ฏธ์น๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ ๋ค๋ฅธ ๋งค๊ฐ๋ณ์๊ฐ ๋ง์ด ์๋ค๋ ๊ฒ์ด ๋ฐํ์ก์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์คํ๊ธฐ๊ฐ ๋๊ธฐ ๋ชจ๋์ ์๋ ๊ฒฝ์ฐ ๋ช ์๊ฐ ํ์ ์คํ๊ธฐ์์ ๋ฆฌ์์ค๋ฅผ ๊ฐ์ ธ์ฌ ์ ์์ต๋๊น?
spark.dynamicAllocation.executorIdleTimeout=120s
์ฐ๋ฆฌ์ ๊ฒฝ์ฐ ์คํ์๊ฐ XNUMX๋ถ ๋์ ์๋ฌด ์์ ๋ ํ์ง ์์ผ๋ฉด ๊ณต์ฉ ํ๋ก ๋๋๋ ค์ฃผ์ธ์. ๊ทธ๋ฌ๋ ์ด ๋งค๊ฐ๋ณ์๊ฐ ํญ์ ์ถฉ๋ถํ์ง๋ ์์์ต๋๋ค. ๊ทธ ์ฌ๋์ด ์ค๋ซ๋์ ์๋ฌด๊ฒ๋ ํ์ง ์์๊ณ ์์์ด ํ๋ณด๋์ง ์์ ๊ฒ์ด ๋ถ๋ช ํ์ต๋๋ค. ์บ์๋ ๋ฐ์ดํฐ๊ฐ ํฌํจ๋ ์คํ๊ธฐ๋ฅผ ์ ํํ๋ ์๊ฐ ์ดํ์ ํน๋ณํ ๋งค๊ฐ๋ณ์๋ ์๋ ๊ฒ์ผ๋ก ๋ฐํ์ก์ต๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ์ด ๋งค๊ฐ๋ณ์๋ ๋ฌดํ๋์์ต๋๋ค! ์ฐ๋ฆฌ๋ ๊ทธ๊ฒ์ ์์ ํ์ต๋๋ค.
spark.dynamicAllocation.cachedExecutorIdleTimeout=600s
์ฆ, ์คํ์๊ฐ 5๋ถ ๋์ ์๋ฌด ์์ ๋ ํ์ง ์์ผ๋ฉด ๊ณต์ฉ ํ์ ํ ๋นํฉ๋๋ค. ์ด ๋ชจ๋์์๋ ๋ค์์ ์ฌ์ฉ์๋ฅผ ๋์์ผ๋ก ๋ฆฌ์์ค๋ฅผ ๊ณต๊ฐํ๊ณ ๋ฐํํ๋ ์๋๊ฐ ์ ๋นํด์ก์ต๋๋ค. ๋ถ๋ง์ ์์ด ๊ฐ์ํ์ต๋๋ค. ๊ทธ๋ฌ๋ ์ฐ๋ฆฌ๋ ๋ ๋์๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ๋น ์ต๋ ์คํ์ ์๋ฅผ ์ ํํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ํ๋ก๊ทธ๋จ ์ฐธ๊ฐ์๋น์ ๋๋ค.
spark.dynamicAllocation.maxExecutors=19
๋ฌผ๋ก , ๋ฐ๋์ชฝ์๋ "ํด๋ฌ์คํฐ๊ฐ ์ ํด ์ํ์ด๊ณ ์งํ์๊ฐ 19๋ช ๋ฐ์ ์์ต๋๋ค."๋ผ๊ณ ๋ถ๋ง์ ํ์ ์ฌ๋๋ค๋ ์์ง๋ง, ๋ฌด์์ ํ ์ ์์ต๋๊น? ์ผ์ข ์ ์ฌ๋ฐ๋ฅธ ๊ท ํ์ด ํ์ํฉ๋๋ค. ๋ชจ๋ ์ฌ๋์ ํ๋ณตํ๊ฒ ๋ง๋ค ์๋ ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ ์ฌ๊ฑด์ ์ธ๋ถ ์ฌํญ๊ณผ ๊ด๋ จ๋ ๋ ํ๋์ ์์ ์ด์ผ๊ธฐ์ ๋๋ค. ์ด๋ค ์ด์ ์์์ธ์ง ์ฌ๋ฌ ์ฌ๋์ด ์ค์ต ์์ ์ ๋ฆ์๊ณ , ์ด๋ค ์ด์ ๋ก Spark๊ฐ ์์๋์ง ์์์ต๋๋ค. ์ฐ๋ฆฌ๋ ๋ฌด๋ฃ ๋ฆฌ์์ค์ ์์ ์ดํด๋ณด์๋๋ฐ ๊ฑฐ๊ธฐ์ ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ์คํํฌ๊ฐ ์์๋์ด์ผ ํฉ๋๋ค. ๋คํ์ค๋ฝ๊ฒ๋ ๊ทธ ๋น์ ๋ฌธ์๋ ์ด๋ฏธ ํ์ ํผ์ง ์ด๋๊ฐ์ ์ถ๊ฐ๋์ด ์์๊ณ Spark๊ฐ ์์๋ ๋ ์์ํ ํฌํธ๋ฅผ ์ฐพ๋๋ค๋ ๊ฒ์ ๊ธฐ์ตํ์ต๋๋ค. ๋ฒ์์ ์ฒซ ๋ฒ์งธ ํฌํธ๊ฐ ์ฌ์ฉ ์ค์ธ ๊ฒฝ์ฐ ์์๋๋ก ๋ค์ ํฌํธ๋ก ์ด๋ํฉ๋๋ค. ๋ฌด๋ฃ๋ผ๋ฉด ์บก์ณ๋ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด์ ๋ํ ์ต๋ ์๋ ํ์๋ฅผ ๋ํ๋ด๋ ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค. ๊ธฐ๋ณธ๊ฐ์ 16์ ๋๋ค. ๊ทธ ์ซ์๋ ์ฐ๋ฆฌ ๊ทธ๋ฃน์ ์์ ์ธ์๋ณด๋ค ์ ์ต๋๋ค. ๊ทธ๋์ 16๋ฒ์ ์๋ ๋์ ์คํํฌ๋ ํฌ๊ธฐํ๊ณ ์์ํ ์ ์๋ค๊ณ ํ์ต๋๋ค. ์ด ๋งค๊ฐ๋ณ์๋ฅผ ์์ ํ์ต๋๋ค.
spark.port.maxRetries=50
๋ค์์ผ๋ก ์ฐ๋ฆฌ ์ฌ๋ก์ ์ธ๋ถ ์ฌํญ๊ณผ ๋ณ๋ก ๊ด๋ จ์ด ์๋ ์ผ๋ถ ์ค์ ์ ๋ํด ์ค๋ช ํ๊ฒ ์ต๋๋ค.
Spark๋ฅผ ๋ ๋น ๋ฅด๊ฒ ์์ํ๋ ค๋ฉด SPARK_HOME ํ ๋๋ ํฐ๋ฆฌ์ ์๋ jars ํด๋๋ฅผ ์์นด์ด๋ธํ์ฌ HDFS์ ๋ฐฐ์นํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ๊ทธ๋ฌ๋ฉด ๊ทธ๋ ์์ ์๊ฐ ์ด๋ฌํ jarnik์ ์ฃ๋ ๋ฐ ์๊ฐ์ ๋ญ๋นํ์ง ์์ ๊ฒ์ ๋๋ค.
spark.yarn.archive=hdfs:///tmp/spark-archive.zip
๋ํ ๋ ๋น ๋ฅธ ์์ ์ ์ํด kryo๋ฅผ ์ง๋ ฌ ๋ณํ๊ธฐ๋ก ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ๊ธฐ๋ณธ๋ณด๋ค ๋ ์ต์ ํ๋์ด ์์ต๋๋ค.
spark.serializer=org.apache.spark.serializer.KryoSerializer
๊ทธ๋ฆฌ๊ณ Spark์๋ ์ข ์ข ๋ฉ๋ชจ๋ฆฌ์์ ์ถฉ๋์ด ๋ฐ์ํ๋ค๋ ์ค๋ ๋ฌธ์ ๋ ์์ต๋๋ค. ์ข ์ข ์ด๋ฐ ์ผ์ ์์ ์๊ฐ ๋ชจ๋ ๊ฒ์ ๊ณ์ฐํ๊ณ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์ด์ ์์๊ฒ ๋ณด๋ด๋ ์๊ฐ์ ๋ฐ์ํฉ๋๋ค. ์ฐ๋ฆฌ๋ ์ด ๋งค๊ฐ๋ณ์๋ฅผ ๋ ํฌ๊ฒ ๋ง๋ค์์ต๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก 1GB์ธ๋ฐ ์ ํฌ๋ 3๊ฐ๋ก ๋ง๋ค์์ต๋๋ค.
spark.driver.maxResultSize=3072
๊ทธ๋ฆฌ๊ณ ๋ง์ง๋ง์ผ๋ก ๋์ ํธ๋ก. HortonWorks ๋ฐฐํฌํ - HDP 2.1์์ Spark๋ฅผ ๋ฒ์ 2.5.3.0๋ก ์ ๋ฐ์ดํธํ๋ ๋ฐฉ๋ฒ. ์ด HDP ๋ฒ์ ์๋ ์ฌ์ ์ค์น๋ ๋ฒ์ 2.0์ด ํฌํจ๋์ด ์์ง๋ง Spark๊ฐ ๋งค์ฐ ํ๋ฐํ๊ฒ ๊ฐ๋ฐ๋๊ณ ์์ผ๋ฉฐ ๊ฐ๊ฐ์ ์ ๋ฒ์ ์ ์ผ๋ถ ๋ฒ๊ทธ๋ฅผ ์์ ํ๊ณ Python API๋ฅผ ํฌํจํ ์ถ๊ฐ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค๊ณ ์ค์ค๋ก ๊ฒฐ์ ํ์ต๋๋ค. ์ ๋ฐ์ดํธ๊ฐ ์๋ฃ๋์์ต๋๋ค.
Hadoop 2.7 ๊ณต์ ์น์ฌ์ดํธ์์ ๋ฒ์ ์ ๋ค์ด๋ก๋ํ์ต๋๋ค. ์์ถ์ ํ๊ณ HDP ํด๋์ ๋ฃ์ด์ฃผ์ธ์. ํ์์ ๋ฐ๋ผ ์ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ์ค์นํ์ต๋๋ค. ์์ํ๋๋ฐ ์์๋์ง ์์ต๋๋ค. ๋งค์ฐ ๋ถ๋ถ๋ช ํ ์ค๋ฅ๋ฅผ ์์ฑํฉ๋๋ค.
java.lang.NoClassDefFoundError: com/sun/jersey/api/client/config/ClientConfig
์ธํฐ๋ท ๊ฒ์ ๋์ Spark๋ Hadoop์ด ํ์ํ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ์ ๋ฒ์ ์ Jersey๋ฅผ ์ฌ์ฉํ๊ธฐ๋ก ๊ฒฐ์ ํ๋ค๋ ์ฌ์ค์ ์๊ฒ ๋์์ต๋๋ค. ๊ทธ๋ค์ JIRA์์ ์ด ์ฃผ์ ์ ๊ดํด ์๋ก ๋
ผ์ํฉ๋๋ค. ํด๊ฒฐ์ฑ
์ ๋ค์ด๋ก๋ํ๋ ๊ฒ์ด ์์ต๋๋ค.
์ฐ๋ฆฌ๋ ์ด ์ค๋ฅ๋ฅผ ํด๊ฒฐํ์ง๋ง ์๋กญ๊ณ ๋ค์ ๊ฐ์ํ๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค.
org.apache.spark.SparkException: Yarn application has already ended! It might have been killed or unable to launch application master
๋์์ ๋ฒ์ 2.0์ ์คํํ๋ ค๊ณ ํฉ๋๋ค. ๋ชจ๋ ๊ฒ์ด ์ ์์ ๋๋ค. ๋ฌด์จ ์ผ์ด ์ผ์ด๋๊ณ ์๋์ง ์ถ์ธกํด ๋ณด์ธ์. ์ด ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ก๊ทธ๋ฅผ ์กฐ์ฌํ ๊ฒฐ๊ณผ ๋ค์๊ณผ ๊ฐ์ ๋ด์ฉ์ ํ์ธํ์ต๋๋ค.
/usr/hdp/${hdp.version}/hadoop/lib/hadoop-lzo-0.6.0.${hdp.version}.jar
์ผ๋ฐ์ ์ผ๋ก ์ด๋ค ์ด์ ๋ก hdp.version์ด ํด๊ฒฐ๋์ง ์์์ต๋๋ค. ์ธํฐ๋ท ๊ฒ์ ํ ํด๊ฒฐ์ฑ ์ ์ฐพ์์ต๋๋ค. Ambari์ YARN ์ค์ ์ผ๋ก ์ด๋ํ์ฌ ์ฌ์ฉ์ ์ ์ YaRN ์ฌ์ดํธ์ ๋งค๊ฐ๋ณ์๋ฅผ ์ถ๊ฐํด์ผ ํฉ๋๋ค.
hdp.version=2.5.3.0-37
์ด ๋ง๋ฒ์ด ๋์์ด ๋์๊ณ ์คํํฌ๋ ์ฑ๊ณตํ์ต๋๋ค. ์ฐ๋ฆฌ๋ ์ฌ๋ฌ jupyter ๋ ธํธ๋ถ์ ํ ์คํธํ์ต๋๋ค. ๋ชจ๋ ๊ฒ์ด ์๋ํ๊ณ ์์ต๋๋ค. ํ ์์ผ(๋ด์ผ) ์ฒซ ์คํํฌ ๋ ์จ ์ค๋น๊ฐ ์๋ฃ๋์์ต๋๋ค!
UPD. ์์ ์ค์ ๋ ๋ค๋ฅธ ๋ฌธ์ ๊ฐ ๋๋ฌ๋ฌ์ต๋๋ค. ์ด๋ค ์์ ์์ YARN์ Spark์ฉ ์ปจํ ์ด๋ ์ ๊ณต์ ์ค๋จํ์ต๋๋ค. YARN์์๋ ๊ธฐ๋ณธ์ ์ผ๋ก 0.2์ธ ๋งค๊ฐ๋ณ์๋ฅผ ์์ ํด์ผ ํ์ต๋๋ค.
yarn.scheduler.capacity.maximum-am-resource-percent=0.8
์ฆ, ์์์ 20%๋ง์ด ์์ ๋ถ๋ฐฐ์ ์ฐธ์ฌํ์ต๋๋ค. ๋งค๊ฐ๋ณ์๋ฅผ ๋ณ๊ฒฝํ ํ YARN์ ๋ค์ ๋ก๋ํ์ต๋๋ค. ๋ฌธ์ ๋ ํด๊ฒฐ๋์๊ณ ๋๋จธ์ง ์ฐธ๊ฐ์๋ค๋ ์คํํฌ ์ปจํ
์คํธ๋ฅผ ์คํํ ์ ์์์ต๋๋ค.
์ถ์ฒ : habr.com