YARN์—์„œ Spark ๊ตฌ์„ฑ

ํ•˜๋ธŒ๋ฅด, ์•ˆ๋…•ํ•˜์„ธ์š”! ์–ด์ œ Apache Spark ์ „์šฉ ๋ชจ์ž„, Rambler&Co ์ง์›๋“ค๋กœ๋ถ€ํ„ฐ ์ด ๋„๊ตฌ ๊ตฌ์„ฑ๊ณผ ๊ด€๋ จ๋œ ์ฐธ๊ฐ€์ž๋“ค๋กœ๋ถ€ํ„ฐ ๊ฝค ๋งŽ์€ ์งˆ๋ฌธ์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๊ทธ์˜ ๋ฐœ์ž์ทจ๋ฅผ ๋”ฐ๋ฅด๊ณ  ์šฐ๋ฆฌ์˜ ๊ฒฝํ—˜์„ ๊ณต์œ ํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ฃผ์ œ๋Š” ์‰ฝ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์˜๊ฒฌ์„ ํ†ตํ•ด ๊ท€ํ•˜์˜ ๊ฒฝํ—˜์„ ๊ณต์œ ํ•ด ์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. ์–ด์ฉŒ๋ฉด ์šฐ๋ฆฌ๊ฐ€ ์ž˜๋ชป๋œ ๊ฒƒ์„ ์ดํ•ดํ•˜๊ณ  ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

Spark ์‚ฌ์šฉ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๊ฐ„๋žตํ•œ ์†Œ๊ฐœ์ž…๋‹ˆ๋‹ค. XNUMX๊ฐœ์›” ํ”„๋กœ๊ทธ๋žจ์ด ์žˆ์–ด์š” โ€œ๋น…๋ฐ์ดํ„ฐ ์ „๋ฌธ๊ฐ€โ€, ๋‘ ๋ฒˆ์งธ ๋ชจ๋“ˆ ์ „์ฒด์—์„œ ์ฐธ๊ฐ€์ž๋“ค์€ ์ด ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์กฐ์ง์ž๋กœ์„œ ์šฐ๋ฆฌ์˜ ์ž„๋ฌด๋Š” ๊ทธ๋Ÿฌํ•œ ๊ฒฝ์šฐ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ค€๋น„ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์šฐ๋ฆฌ ์‚ฌ์šฉ์˜ ํŠน์ง•์€ Spark์—์„œ ๋™์‹œ์— ์ž‘์—…ํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์˜ ์ˆ˜๊ฐ€ ์ „์ฒด ๊ทธ๋ฃน๊ณผ ๋™์ผํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์„ธ๋ฏธ๋‚˜์—์„œ ๋ชจ๋‘๊ฐ€ ๋™์‹œ์— ๋ญ”๊ฐ€๋ฅผ ์‹œ๋„ํ•˜๊ณ  ์„ ์ƒ๋‹˜์˜ ๋ง์„ ๋”ฐ๋ผ ๋ฐ˜๋ณตํ•˜๋Š” ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด๊ฒƒ์€ ๋งŽ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋•Œ๋กœ๋Š” ์ตœ๋Œ€ 40๋ช…๊นŒ์ง€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ์ด๋Ÿฌํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€์— ์ง๋ฉดํ•œ ํšŒ์‚ฌ๋Š” ์ „ ์„ธ๊ณ„์ ์œผ๋กœ ๋งŽ์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‹ค์Œ์œผ๋กœ ํŠน์ • ๊ตฌ์„ฑ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์„ ํƒํ•œ ๋ฐฉ๋ฒ•๊ณผ ์ด์œ ๋ฅผ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์ฒ˜์Œ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ฉ์‹œ๋‹ค. Spark์—๋Š” ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” 3๊ฐ€์ง€ ์˜ต์…˜(๋…๋ฆฝํ˜•, Mesos ์‚ฌ์šฉ, YARN ์‚ฌ์šฉ)์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ์ด ํƒ€๋‹นํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์„ธ ๋ฒˆ์งธ ์˜ต์…˜์„ ์„ ํƒํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ด๋ฏธ hadoop ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ ์ฐธ๊ฐ€์ž๋“ค์€ ์ด๋ฏธ ๊ทธ ์•„ํ‚คํ…์ฒ˜์— ๋Œ€ํ•ด ์ž˜ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. YARN์„ ์‚ฌ์šฉํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

spark.master=yarn

๋”์šฑ ๋” ํฅ๋ฏธ๋กญ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ 3๊ฐ€์ง€ ๋ฐฐํฌ ์˜ต์…˜์—๋Š” ๊ฐ๊ฐ ํด๋ผ์ด์–ธํŠธ์™€ ํด๋Ÿฌ์Šคํ„ฐ๋ผ๋Š” 2๊ฐ€์ง€ ๋ฐฐํฌ ์˜ต์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ฐ˜์„ ๋‘” ์„ ์  ์„œ๋ฅ˜ ๋น„์น˜ ์ธํ„ฐ๋„ท์˜ ๋‹ค์–‘ํ•œ ๋งํฌ๋ฅผ ํ†ตํ•ด ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋Œ€ํ™”ํ˜• ์ž‘์—…์— ์ ํ•ฉํ•˜๋‹ค๋Š” ๊ฒฐ๋ก ์„ ๋‚ด๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด jupyter ๋…ธํŠธ๋ถ์„ ํ†ตํ•ด ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ํ”„๋กœ๋•์…˜ ์†”๋ฃจ์…˜์— ๋” ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ์˜ ๊ฒฝ์šฐ ๋Œ€ํ™”ํ˜• ์ž‘์—…์— ๊ด€์‹ฌ์ด ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

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์—์„œ ์ด ์ฃผ์ œ์— ๊ด€ํ•ด ์„œ๋กœ ๋…ผ์Ÿํ•ฉ๋‹ˆ๋‹ค. ํ•ด๊ฒฐ์ฑ…์€ ๋‹ค์šด๋กœ๋“œํ•˜๋Š” ๊ฒƒ์ด ์—ˆ์Šต๋‹ˆ๋‹ค. ์ €์ง€ ๋ฒ„์ „ 1.17.1. SPARK_HOME์˜ jars ํด๋”์— ๋„ฃ๊ณ  ๋‹ค์‹œ ์••์ถ•ํ•œ ํ›„ HDFS์— ์—…๋กœ๋“œํ•˜์„ธ์š”.

์šฐ๋ฆฌ๋Š” ์ด ์˜ค๋ฅ˜๋ฅผ ํ•ด๊ฒฐํ–ˆ์ง€๋งŒ ์ƒˆ๋กญ๊ณ  ๋‹ค์†Œ ๊ฐ„์†Œํ™”๋œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

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

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€