Home > ๐Ÿ“– ๊ฐœ์ธ ๊ณต๋ถ€ > ๐Ÿ‘‰ Apache Hadoop > ๐Ÿ“˜ YARN(Yet Another Resource Negotiator) ๊ธฐ๋ณธ ์ด๋ก 

๐Ÿ“˜ YARN(Yet Another Resource Negotiator) ๊ธฐ๋ณธ ์ด๋ก 
Apache Hadoop Study

์ €๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š”, ํ•˜๋‘ก์˜ ํ•ต์‹ฌ์„ ๊ณต๋ถ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
์ด๋ฒˆ์—๋Š” Hadoop V2 ์˜ ํ•ต์‹ฌ์ธ YARN ์— ๋Œ€ํ•˜์—ฌ ๊ณต๋ถ€ํ•œ ๋‚ด์šฉ์„ ํฌ์ŠคํŒ… ํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๐Ÿ“˜ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์˜ ์ดํ•ด์™€ ํ•˜๋‘ก์˜ ๋“ฑ์žฅ ๋ฐฐ๊ฒฝ
๐Ÿ“˜ ํ•˜๋‘ก์˜ ํ•ต์‹ฌ ๊ตฌ์„ฑ์š”์†Œ์™€ ์ด๋ก 


โ—ˆ


๐Ÿ˜ 1. YARN

2012๋…„ ์ด์ „, Hadoop์„ ์ด์šฉํ•ด ๋Œ€์šฉ๋Ÿ‰ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋ ค๋ฉด MapReduce ๋ชจ๋ธ์„ ๊ธฐ๋ฐ˜์œผ๋กœ Java, Python, Ruby, ํ˜น์€ Pig ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•ด ๊ฐœ๋ฐœํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ Hadoop 2.0๊ณผ ํ•จ๊ป˜ ๋“ฑ์žฅํ•œ Yarn์€ MapReduce ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ชจ๋ธ์˜ ์ œ์•ฝ์—์„œ ๋ฒ—์–ด๋‚˜, ๋‹ค์–‘ํ•œ ๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์‹ฑ ํ”„๋กœ๊ทธ๋žจ์„ Hadoop ์ž์›์„ ํ™œ์šฉํ•ด ์ž์œ ๋กญ๊ฒŒ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.

Yarn์€ ๋Œ€์šฉ๋Ÿ‰ ๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์‹ฑ ์ฒ˜๋ฆฌ์—์„œ ์„ฑ๋Šฅ ํ–ฅ์ƒ๊ณผ ์œ ์—ฐํ•œ ์‹คํ–‰ ์—”์ง„(execution engine)์„ ์ œ๊ณตํ•œ๋‹ค๋Š” ์ ์ด ํฐ ์žฅ์ ์ž…๋‹ˆ๋‹ค.

๋˜ํ•œ, ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด์„œ Spark์™€ ๊ฐ™์€ ๋‹ค์–‘ํ•œ ๋ถ„์‚ฐ ์ฒ˜๋ฆฌ ํ”„๋ ˆ์ž„์›Œํฌ๋„ Yarn์„ ์ง€์›ํ•˜๊ฒŒ ๋˜๋ฉด์„œ, ํ•˜๋‘ก ์ƒํƒœ๊ณ„์—์„œ ํ•„์ˆ˜์ ์ธ ๋ฆฌ์†Œ์Šค ๊ด€๋ฆฌ ํ”Œ๋žซํผ์œผ๋กœ ์ž๋ฆฌ์žก์•˜์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ YARN ์— ๋Œ€ํ•˜์—ฌ, ์ง€๊ธˆ๋ถ€ํ„ฐ ๊ณต๋ถ€ํ•˜๊ณ , ์ •๋ฆฌํ•œ ๋‚ด์šฉ์„ ํฌ์ŠคํŒ… ํ•ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๐Ÿ˜ 1.1. YARN ์ด๋ž€


yarn

์ถœ์ฒ˜ : YARN



Yarn์€ Hadoop 2.0๋ถ€ํ„ฐ ๋„์ž…๋œ ํด๋Ÿฌ์Šคํ„ฐ ์ž์› ๊ด€๋ฆฌ ์‹œ์Šคํ…œ(Resource Manager)์ž…๋‹ˆ๋‹ค.
์ด์ „ Hadoop ๋ฒ„์ „์—์„œ๋Š” MapReduce๋ผ๋Š” ํŠน์ • ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ชจ๋ธ์—๋งŒ ์˜์กดํ•ด์„œ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ–ˆ๋Š”๋ฐ, Yarn์ด ๋„์ž…๋˜๋ฉด์„œ MapReduce์— ๊ตญํ•œ๋˜์ง€ ์•Š๊ณ  ๋‹ค์–‘ํ•œ ์ข…๋ฅ˜์˜ ๋ถ„์‚ฐ ์ฒ˜๋ฆฌ ์ž‘์—…์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

Yarn์˜ ์ฃผ์š” ์—ญํ• ์€ ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด ์—ฌ๋Ÿฌ ๋…ธ๋“œ์˜ ์ž์›์„ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ณ  ํ• ๋‹นํ•˜์—ฌ, ์—ฌ๋Ÿฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋™์‹œ์— ์•ˆ์ •์ ์œผ๋กœ ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋„๋ก ์กฐ์œจํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ฆ‰, ์—ฌ๋Ÿฌ ์‚ฌ์šฉ์ž๊ฐ€ ๋‹ค์–‘ํ•œ ์ž‘์—…์„ ๋™์‹œ์— ์‹คํ–‰ํ•ด๋„ ์ž์›์ด ๊ณผ๋„ํ•˜๊ฒŒ ์ง‘์ค‘๋˜๊ฑฐ๋‚˜ ๋‚ญ๋น„๋˜์ง€ ์•Š๊ณ , ์ ์ ˆํ•˜๊ฒŒ ๋ถ„๋ฐฐ๋˜์–ด ์ „์ฒด ์‹œ์Šคํ…œ์˜ ํšจ์œจ์„ฑ๊ณผ ์•ˆ์ •์„ฑ์„ ๋†’์ž…๋‹ˆ๋‹ค.

Yarn์€ ๋˜ํ•œ ์‹คํ–‰ ํ™˜๊ฒฝ์„ ์œ ์—ฐํ•˜๊ฒŒ ์ œ๊ณตํ•˜์—ฌ, Apache Spark, Flink, Tez ๊ฐ™์€ ๋‹ค์–‘ํ•œ ๋ถ„์‚ฐ ์ฒ˜๋ฆฌ ํ”„๋ ˆ์ž„์›Œํฌ๋„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
์ด๋กœ ์ธํ•ด ๋น…๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ์˜ ๋ฒ”์œ„๊ฐ€ ๋‹จ์ˆœํ•œ ๋ฐฐ์น˜ ์ž‘์—…์—์„œ ์‹ค์‹œ๊ฐ„ ์ŠคํŠธ๋ฆฌ๋ฐ, ๋จธ์‹ ๋Ÿฌ๋‹, ๊ทธ๋ž˜ํ”„ ์ฒ˜๋ฆฌ ๋“ฑ์œผ๋กœ ํ™•์žฅ๋  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.


๐Ÿ˜ 1.1.1. Yarn์˜ ๋Œ€ํ‘œ์ ์ธ Use-Cases

Yarn์ด ๋“ฑ์žฅํ•˜๋ฉด์„œ Hadoop ๊ธฐ๋ฐ˜ ํด๋Ÿฌ์Šคํ„ฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์žฅ์ ๊ณผ ๊ฐ€๋Šฅ์„ฑ์„ ๊ฐ–๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

  • ๐Ÿ” ๋ฐฐ์น˜ ์ž‘์—…๋ฟ ์•„๋‹ˆ๋ผ ๋ฐ˜๋ณต ์ž‘์—…๊ณผ ์‹ค์‹œ๊ฐ„ ์ŠคํŠธ๋ฆฌ๋ฐ ์ฒ˜๋ฆฌ ์ง€์›
    ๊ณผ๊ฑฐ Hadoop์€ ์ผ๊ด„ ์ฒ˜๋ฆฌ(batch processing)์— ์ดˆ์ ์ด ๋งž์ถฐ์ ธ ์žˆ์—ˆ์œผ๋‚˜, Yarn ๋•๋ถ„์— ์ง€์†์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์ŠคํŠธ๋ฆฌ๋ฐ ์ž‘์—…๊ณผ ์ฃผ๊ธฐ์ ์œผ๋กœ ๋ฐ˜๋ณต ์‹คํ–‰๋˜๋Š” ์ž‘์—…๋“ค๋„ ํšจ์œจ์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
    ์˜ˆ๋ฅผ ๋“ค์–ด, ์‹ค์‹œ๊ฐ„ ๋กœ๊ทธ ๋ถ„์„, ์‹ค์‹œ๊ฐ„ ์ถ”์ฒœ ์‹œ์Šคํ…œ ๋“ฑ ์›น ์„œ๋น„์Šค์— ํ•„์š”ํ•œ ๋น ๋ฅธ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•ด์กŒ์Šต๋‹ˆ๋‹ค.

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

  • ๐Ÿ” ํ†ตํ•ฉ ํด๋Ÿฌ์Šคํ„ฐ ์šด์˜
    ๋ฐ์ดํ„ฐ ์ €์žฅ(HDFS), ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ(MapReduce, Spark ๋“ฑ), ๋ฐ์ดํ„ฐ ์กฐํšŒ ๋“ฑ ๋‹ค์–‘ํ•œ ์ž‘์—…์„ ๋‹จ์ผ ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ํ•จ๊ป˜ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด ์šด์˜ ๊ด€๋ฆฌ๊ฐ€ ๊ฐ„ํŽธํ•ด์กŒ๊ณ , ๋ฐ์ดํ„ฐ ์ด๋™์— ํ•„์š”ํ•œ ์‹œ๊ฐ„๊ณผ ๋น„์šฉ๋„ ์ค„์ผ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

  • ๐Ÿ” ๋‹ค์–‘ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋™์‹œ ์‹คํ–‰ ์ง€์›
    ํ•œ ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์—ฌ๋Ÿฌ ์ข…๋ฅ˜์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋™์‹œ์— ์•ˆ์ •์ ์œผ๋กœ ์‹คํ–‰๋˜์–ด, ์—ฌ๋Ÿฌ ํŒ€์ด๋‚˜ ์„œ๋น„์Šค๊ฐ€ ํ•˜๋‚˜์˜ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๐Ÿ˜ 1.1.2. Container ๋ž€?

Docker ๋ฅผ ์‚ฌ์šฉํ•ด๋ณด์‹  ๋ถ„๋“ค์ด๋ผ๋ฉด, Container ์˜ ๊ฐœ๋…์„ ์–ด๋А์ •๋„ ์•Œ๊ณ  ๊ณ„์‹ค ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ปจํ…Œ์ด๋„ˆ๋Š” ์†Œํ”„ํŠธ์›จ์–ด ์‹คํ–‰ ํ™˜๊ฒฝ์„ ํ•˜๋‚˜์˜ ํŒจํ‚ค์ง€๋กœ ๋ฌถ์€ ๊ฒฝ๋Ÿ‰ํ™”๋œ ๊ฐ€์ƒํ™” ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค.
์—ฌ๊ธฐ์—๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋™์ž‘ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์ฝ”๋“œ, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, ์„ค์ • ํŒŒ์ผ ๋“ฑ์ด ํฌํ•จ๋˜์–ด ์žˆ์–ด, ์–ด๋””์„œ๋“  ๋™์ผํ•œ ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ปจํ…Œ์ด๋„ˆ ๊ธฐ์ˆ ์€ ๋ฆฌ๋ˆ…์Šค์˜ cgroup๊ณผ namespace ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•˜์—ฌ, ํ•˜๋‚˜์˜ ๋ฌผ๋ฆฌ์  ์„œ๋ฒ„ ๋‚ด์—์„œ๋„ ๊ฐ๊ฐ์˜ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋…๋ฆฝ์ ์œผ๋กœ CPU, ๋ฉ”๋ชจ๋ฆฌ, ๋„คํŠธ์›Œํฌ ์ž์›์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ฒฉ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
์ด ๊ฒฉ๋ฆฌ ๋•๋ถ„์— ์„œ๋กœ ๋‹ค๋ฅธ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ถฉ๋Œํ•˜๊ฑฐ๋‚˜ ๊ฐ„์„ญํ•˜์ง€ ์•Š๊ณ , ์•ˆ์ •์ ์œผ๋กœ ๋™์‹œ์— ์‹คํ–‰๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ฃผ์š” ์ด์œ ์™€ ์žฅ์ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค

  • ๐Ÿ“ฆ ์ฑ…์ž„ ๋ถ„๋ฆฌ(Separation of responsibility)
    ๊ฐœ๋ฐœ์ž๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ์™€ ๊ทธ์— ํ•„์š”ํ•œ ์˜์กด์„ฑ๋งŒ ์‹ ๊ฒฝ ์“ฐ๋ฉด ๋˜๊ณ , ๋ฐฐํฌ ํ™˜๊ฒฝ์˜ ์„ธ๋ถ€ ์‚ฌํ•ญ(์šด์˜์ฒด์ œ ๋ฒ„์ „, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ถฉ๋Œ ๋“ฑ)์€ ํฌ๊ฒŒ ์‹ ๊ฒฝ ์“ธ ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
    ๋•๋ถ„์— ๊ฐœ๋ฐœ๊ณผ ์šด์˜ ๊ฐ„ ํ˜‘์—…์ด ์›ํ™œํ•ด์ง€๊ณ , ๋ฐฐํฌ ๋ฐ ํ…Œ์ŠคํŠธ ๊ณผ์ •์—์„œ ํ™˜๊ฒฝ ๋ฌธ์ œ๋กœ ์ธํ•œ ์˜ค๋ฅ˜๊ฐ€ ์ค„์–ด๋“ญ๋‹ˆ๋‹ค.

  • ๐Ÿ“ฆ ๋†’์€ ์ด์‹์„ฑ(Portability)
    ์ปจํ…Œ์ด๋„ˆ๋Š” ์šด์˜์ฒด์ œ ์ˆ˜์ค€์—์„œ ๊ฐ€์ƒํ™”๋˜๋ฏ€๋กœ, ๋ฆฌ๋ˆ…์Šค ๊ธฐ๋ฐ˜ ์„œ๋ฒ„๋ผ๋ฉด ์–ด๋А ํ™˜๊ฒฝ์—์„œ๋“  ๋™์ผํ•˜๊ฒŒ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    ๋‹จ, ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•˜๋ ค๋ฉด ํ•ด๋‹น ์‹œ์Šคํ…œ์ด ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰์„ ์ง€์›ํ•ด์•ผ ํ•˜๋ฉฐ, ์ผ๋ฐ˜์ ์œผ๋กœ Linux/amd64 ์•„ํ‚คํ…์ฒ˜์—์„œ ๊ฐ€์žฅ ์›ํ™œํ•ฉ๋‹ˆ๋‹ค.

  • ๐Ÿ“ฆ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฒฉ๋ฆฌ(Application isolation)
    ์ปจํ…Œ์ด๋„ˆ๋งˆ๋‹ค CPU, ๋ฉ”๋ชจ๋ฆฌ, ์Šคํ† ๋ฆฌ์ง€, ๋„คํŠธ์›Œํฌ ๊ฐ™์€ ์ž์›์„ ํ• ๋‹นํ•˜๊ณ  ์ œํ•œํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ํ•˜๋‚˜์˜ ์„œ๋ฒ„์—์„œ ์—ฌ๋Ÿฌ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋™์‹œ์— ์‹คํ–‰๋˜์–ด๋„ ์„œ๋กœ ๊ฐ„์„ญ ์—†์ด ์•ˆ์ •์ ์œผ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.
    ์ด๋Š” ์‹œ์Šคํ…œ ์•ˆ์ •์„ฑ๊ณผ ๋ณด์•ˆ์„ฑ์„ ๋†’์ด๋Š” ๋ฐ๋„ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

์ตœ๊ทผ์—๋Š” Kubernetes ๊ฐ™์€ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ๋„๊ตฌ์™€ ํ•จ๊ป˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‚ฌ์šฉํ•ด, ๋Œ€๊ทœ๋ชจ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์„ ํšจ์œจ์ ์œผ๋กœ ์šด์˜ํ•˜๋Š” ์‚ฌ๋ก€๊ฐ€ ๋งŽ์•„์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

Yarn๋„ ์ด๋Ÿฐ ์ปจํ…Œ์ด๋„ˆ ๊ฐœ๋…์„ ์ฐจ์šฉํ•ด ํด๋Ÿฌ์Šคํ„ฐ ์ž์› ๊ด€๋ฆฌ์— ์ ์šฉํ•จ์œผ๋กœ์จ, ๋”์šฑ ์„ธ๋ฐ€ํ•˜๊ณ  ์œ ์—ฐํ•œ ์ž์› ํ• ๋‹น๊ณผ ์ž‘์—… ๊ด€๋ฆฌ๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ˜ 1.2. YARN ์•„ํ‚คํ…์ฒ˜


HDFS_and_YARN

์ถœ์ฒ˜ : YARN ๊ณผ HDFS



Yarn ๊ณผ HDFS ์ž์ฒด๋Š” ์™„์ „ํžˆ ๋…๋ฆฝ์ ์ž…๋‹ˆ๋‹ค.

Yarn์€ CPU, ๋ฉ”๋ชจ๋ฆฌ์™€ ๊ฐ™์€ ์ปดํ“จํŒ… ์ž์›์„ ํ• ๋‹นํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ์ž์› ๊ด€๋ฆฌ ์†Œํ”„ํŠธ์›จ์–ด์ž…๋‹ˆ๋‹ค.๋ฐ˜๋ฉด, HDFS๋Š” ๋ถ„์‚ฐ ํŒŒ์ผ ์‹œ์Šคํ…œ์œผ๋กœ ๋ฐ์ดํ„ฐ ์ €์žฅ(์Šคํ† ๋ฆฌ์ง€) ์—ญํ• ๋งŒ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ Yarn๊ณผ HDFS๋Š” ์™„์ „ํžˆ ๋…๋ฆฝ์ ์ธ ์‹œ์Šคํ…œ์ด๋ฉฐ, ์„œ๋กœ ๋‹ค๋ฅธ ์—ญํ• ์„ ๋งก๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ฆ‰, Yarn์€ ์ €์žฅ์†Œ์™€ ๊ด€๊ณ„์—†์ด ํด๋Ÿฌ์Šคํ„ฐ์˜ ์ปดํ“จํŒ… ์ž์› ๊ด€๋ฆฌ์— ์ง‘์ค‘ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌํ•œ Yarn ์˜ Architecture ๋Š” ํฌ๊ฒŒ 3๊ฐ€์ง€ ์—ญํ• ์„ ํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ๋กœ ๊ตฌ์„ฑ ๋˜์–ด์žˆ์Šต๋‹ˆ๋‹ค.

  • Resource Manager: ํด๋Ÿฌ์Šคํ„ฐ ์ „์ฒด ์ž์› ๊ด€๋ฆฌ ๋ฐ ์Šค์ผ€์ค„๋ง

  • Application Master: ๊ฐœ๋ณ„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ž์› ์š”์ฒญ ๋ฐ ๊ด€๋ฆฌ

  • Node Managers: ๊ฐ ๋…ธ๋“œ์—์„œ ์ž์› ํ• ๋‹น ๋ฐ ์ž‘์—… ์‹คํ–‰

YARN_Architecture

์ถœ์ฒ˜ : YARN ์•„ํ‚คํ…์ฒ˜



๊ทธ๋Ÿผ YARN ์˜ ๊ธฐ๋ณธ๊ณผ ํ•ต์‹ฌ ์•„ํ‚คํ…์ฒ˜๋ฅผ ํ•˜๋‚˜ํ•˜๋‚˜ ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.


๐Ÿ˜ 1.2.1. Resource Mananger (RM)

Resource Manager(RM)๋Š” YARN ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๋งˆ์Šคํ„ฐ ์ปดํฌ๋„ŒํŠธ์ž…๋‹ˆ๋‹ค.

ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด ๋ชจ๋“  ์ปดํ“จํŒ… ์ž์›(CPU, ๋ฉ”๋ชจ๋ฆฌ ๋“ฑ)์„ ์ด๊ด„ ๊ด€๋ฆฌํ•˜๋Š” ๊ด€๋ฆฌ ๋ณธ๋ถ€ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ํšŒ์‚ฌ ๋‚ด ์—ฌ๋Ÿฌ ๋ถ€์„œ๊ฐ€ ๊ณต์œ ํ•˜๋Š” ์ปดํ“จํ„ฐ ์ž์›์„ ์ค‘์•™์—์„œ ํšจ์œจ์ ์œผ๋กœ ๋ฐฐ๋ถ„ํ•˜๋Š” ์ด๋ฌดํŒ€์ด๋ผ๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

RM์€ ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด์— ์กด์žฌํ•˜๋Š” ๋ชจ๋“  ๋…ธ๋“œ๋“ค์˜ ์ƒํƒœ์™€ ์ž์› ์ •๋ณด๋ฅผ ์•Œ๊ณ  ์žˆ์œผ๋ฉฐ, Rack Awareness(์„œ๋กœ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ๊ฐ€๊นŒ์šด ์„œ๋ฒ„ ๊ทธ๋ฃน ๊ฐ„์˜ ๋„คํŠธ์›Œํฌ ์šฐ์„ ์ˆœ์œ„)๋„ ๊ณ ๋ คํ•ด ์ž์› ํ• ๋‹น์„ ์ตœ์ ํ™”ํ•ฉ๋‹ˆ๋‹ค.

RM ๋‚ด๋ถ€์—๋Š” ์—ฌ๋Ÿฌ ์„œ๋น„์Šค๊ฐ€ ์กด์žฌํ•˜์ง€๋งŒ, ๊ทธ ์ค‘์—์„œ๋„ Scheduler๊ฐ€ ํ•ต์‹ฌ์ž…๋‹ˆ๋‹ค. Scheduler๋Š” ๊ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์š”์ฒญํ•œ ์ž์› ์š”๊ตฌ์‚ฌํ•ญ์„ ๋ถ„์„ํ•ด, ๋ˆ„๊ฐ€ ์–ธ์ œ ์–ผ๋งˆ๋‚˜ ์ž์›์„ ์“ธ์ง€ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.

๋Œ€ํ‘œ์ ์ธ Scheduler๋กœ๋Š” Capacity Scheduler, Fair Scheduler ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋“ค์€ ํด๋Ÿฌ์Šคํ„ฐ ์ž์›์„ ๊ณตํ‰ํ•˜๊ฒŒ ๋‚˜๋ˆ„๊ฑฐ๋‚˜, ์šฐ์„ ์ˆœ์œ„์— ๋”ฐ๋ผ ํ• ๋‹นํ•˜๋Š” ์ •์ฑ…์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ RM์€ ๋‹จ์ˆœํžˆ ์ž์›์„ ํ• ๋‹นํ•˜๋Š” ์—ญํ• ๋ฟ ์•„๋‹ˆ๋ผ, ๋ฆฌ์†Œ์Šค ํ• ๋‹น ์ •์ฑ…์„ ์ ์šฉํ•˜๊ณ , ์ž์› ์‚ฌ์šฉ ํ˜„ํ™ฉ์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๋ฉฐ ์žฅ์•  ๋Œ€์‘์„ ์œ„ํ•œ ์ •๋ณด๋„ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

YARN ์˜ SCheduler ์— ๋Œ€ํ•ด์„œ๋Š” ์•„๋ž˜ 3๋ฒˆ ์ฑ•ํ„ฐ์—์„œ ์ข€ ๋” ์ž์„ธํ•˜๊ฒŒ ์ •๋ฆฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.


๐Ÿ˜ 1.2.2. Application Mananger (AM)

Application Master(AM)๋Š” YARN์—์„œ ์‹คํ–‰๋˜๋Š” ๊ฐ๊ฐ์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋Œ€ํ•ด ๋ณ„๋„๋กœ ์‹คํ–‰๋˜๋Š” ๋งค๋‹ˆ์ € ํ”„๋กœ์„ธ์Šค์ž…๋‹ˆ๋‹ค.

ํด๋Ÿฌ์Šคํ„ฐ ์ „์ฒด๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” RM๊ณผ ๋‹ฌ๋ฆฌ, AM์€ ํŠน์ • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‹จ์œ„์˜ ํ”„๋กœ์ ํŠธ ํŒ€์žฅ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‹œ์ž‘๋  ๋•Œ ๊ฐ€์žฅ ๋จผ์ € ์‹คํ–‰๋˜๋Š” ์ปจํ…Œ์ด๋„ˆ(Container)๋กœ์„œ, ์ž์‹ ์˜ ์ž‘์—…์— ํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ RM์— ์š”์ฒญํ•˜๊ณ  ํ• ๋‹น๋ฐ›์€ ์ž์›์„ ํ™œ์šฉํ•ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ๋ฐ์ดํ„ฐ ๋ถ„์„ ์ž‘์—… ํŒ€์˜ ํŒ€์žฅ์ด๋ผ๋ฉด, RM์—๊ฒŒ โ€˜CPU 4๊ฐœ, ๋ฉ”๋ชจ๋ฆฌ 8GB๋ฅผ ๋‹ฌ๋ผโ€™๊ณ  ์š”์ฒญํ•˜๊ณ , ํ• ๋‹น๋ฐ›์œผ๋ฉด ๊ทธ ์ž์›์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘์—…์„ ์ง„ํ–‰ํ•˜๋Š” ์‹์ž…๋‹ˆ๋‹ค.

AM์€ ํ• ๋‹น๋ฐ›์€ ์ž์› ๋‚ด์—์„œ ์ž‘์—… ๋‹จ์œ„๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ , ํ•„์š”์— ๋”ฐ๋ผ ์ถ”๊ฐ€ ์ž์› ์š”์ฒญ, ์ž‘์—… ์ƒํƒœ ๋ชจ๋‹ˆํ„ฐ๋ง, ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ ๋“ฑ์„ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค. AM์ด ์‹คํŒจํ•˜๋ฉด ํ•ด๋‹น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ž‘์—… ์ž์ฒด๊ฐ€ ์‹คํŒจํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์•ˆ์ •์„ฑ๊ณผ ๋ณต๊ตฌ ๋ฉ”์ปค๋‹ˆ์ฆ˜๋„ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ AM์€ ๊ฐ๊ธฐ ๋‹ค๋ฅธ ๋ถ„์‚ฐ ์ฒ˜๋ฆฌ ํ”„๋ ˆ์ž„์›Œํฌ(์˜ˆ: MapReduce, Spark, Tez ๋“ฑ)์— ๋งž๊ฒŒ ๊ตฌํ˜„๋˜๋ฉฐ, ํ”„๋ ˆ์ž„์›Œํฌ๋ณ„๋กœ ์ž์› ๊ด€๋ฆฌ ๋ฐ ์ž‘์—… ์กฐ์ • ๋ฐฉ๋ฒ•์ด ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๐Ÿ˜ 1.2.3. Node Manager

Node Manager ๋Š” ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด ์—ฌ๋Ÿฌ ๋…ธ๋“œ(์„œ๋ฒ„)์—์„œ ์‹คํ–‰๋˜๋Š” ์—์ด์ „ํŠธ์ž…๋‹ˆ๋‹ค.

๊ฐ Node Manager ๋Š” โ€˜์„œ๋ฒ„ ๋‹ด๋‹น ๊ธฐ์ˆ ์žโ€™๋กœ ๋น„์œ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํ•ด๋‹น ๋…ธ๋“œ์˜ ์ƒํƒœ์™€ ๋ฆฌ์†Œ์Šค๋ฅผ RM์— ์ฃผ๊ธฐ์ ์œผ๋กœ ๋ณด๊ณ (heartbeat)ํ•ฉ๋‹ˆ๋‹ค.

Node Manager ๋Š” CPU ์ฝ”์–ด ์ˆ˜, ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ฉ”๋ชจ๋ฆฌ ์–‘ ๋“ฑ ์ž์‹ ์˜ ๋…ธ๋“œ ์ž์› ์šฉ๋Ÿ‰(capacity)์„ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

YARN Scheduler๊ฐ€ ํ• ๋‹น์„ ๊ฒฐ์ •ํ•˜๋ฉด NM์€ ํ•ด๋‹น ์ž์› ์ผ๋ถ€๋ฅผ ์ปจํ…Œ์ด๋„ˆ(Container) ๋‹จ์œ„๋กœ ๋ฐฐ์ •ํ•˜๊ณ , ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ œ์ถœํ•œ ์ž‘์—…์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์ปจํ…Œ์ด๋„ˆ๋Š” ๋ฆฌ์†Œ์Šค ๊ฒฉ๋ฆฌ๋ฅผ ์œ„ํ•ด ๋…๋ฆฝ์ ์ธ ์‹คํ–‰ ๊ณต๊ฐ„์„ ์ œ๊ณตํ•˜๋ฉฐ, CPU, ๋ฉ”๋ชจ๋ฆฌ, ๋„คํŠธ์›Œํฌ ์‚ฌ์šฉ๋Ÿ‰์„ ์ œํ•œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ NM์€ ์ž์› ์‚ฌ์šฉ๋Ÿ‰ ๋ชจ๋‹ˆํ„ฐ๋ง, ์ปจํ…Œ์ด๋„ˆ ์‹œ์ž‘ ๋ฐ ์ข…๋ฃŒ, ์žฅ์•  ๊ฐ์ง€์™€ ๋ณต๊ตฌ ๋“ฑ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

Node Manager ๋Š” Resource Mananger ์˜ ์ง€์‹œ์— ๋”ฐ๋ผ ์ปจํ…Œ์ด๋„ˆ ์ƒํƒœ๋ฅผ ์ฃผ๊ธฐ์ ์œผ๋กœ ๋ณด๊ณ ํ•˜๋ฉฐ, RM์€ ์ด๋ฅผ ํ†ตํ•ด ํด๋Ÿฌ์Šคํ„ฐ ์ž์› ํ˜„ํ™ฉ์„ ์ •ํ™•ํžˆ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

NodeManager ๋‚ด๋ถ€์—๋Š” Container Manager, NodeStatusUpdater, NodeHealthChecker ๋“ฑ์˜ ์„œ๋น„์Šค๊ฐ€ ์žˆ์–ด, ๊ฐ๊ฐ ์ปจํ…Œ์ด๋„ˆ ๊ด€๋ฆฌ, ์ƒํƒœ ์—…๋ฐ์ดํŠธ, ๋…ธ๋“œ ๊ฑด๊ฐ• ์ฒดํฌ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์ด์ฒ˜๋Ÿผ NM์€ ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด ๋ฌผ๋ฆฌ์  ํ•˜๋“œ์›จ์–ด ์ž์›์„ ์ถ”์ƒํ™”ํ•˜์—ฌ YARN ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์•ˆ์ •์ ์œผ๋กœ ์ œ๊ณตํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ˜ 1.3. YARN ์˜ ์ž‘์—… ํ๋ฆ„


YARN

์ถœ์ฒ˜ : YARN ์ „์ฒด์ ์ธ ํ๋ฆ„

์ž‘์—…์˜ ํ๋ฆ„์„ ๋จผ์ € ๊ฐ„๋‹จํžˆ ์ •๋ฆฌํ•˜๊ณ , ์„ธ๋ถ€์ ์œผ๋กœ ๋“ค์—ฌ๋‹ค๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

  1. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰ ์š”์ฒญ์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค.
    • ์‚ฌ์šฉ์ž๊ฐ€ ์ž‘์—…์„ ์‹คํ–‰ํ•˜๊ณ  ์‹ถ์„ ๋•Œ, ํด๋ผ์ด์–ธํŠธ ํ”„๋กœ๊ทธ๋žจ์ด Yarn API๋ฅผ ํ†ตํ•ด ์‹คํ–‰ ์š”์ฒญ์„ ํ•ฉ๋‹ˆ๋‹ค.
    • ResourceManager๊ฐ€ ์ด ์š”์ฒญ์„ ๋ฐ›๊ณ  ์œ ํšจํ•˜๋‹ค๊ณ  ํŒ๋‹จํ•˜๋ฉด, ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๊ณ ์œ ํ•œ Application ID(์ž‘์—… ์‹๋ณ„ ๋ฒˆํ˜ธ)๋ฅผ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค.
  2. ResourceManager๊ฐ€ NodeManager์—๊ฒŒ Application Master ์‹คํ–‰์„ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค.
    • ResourceManager๋Š” ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด ๋…ธ๋“œ๋“ค ์ค‘ ํ•˜๋‚˜์˜ NodeManager์—๊ฒŒ Application Master๋ผ๋Š” ํŠน๋ณ„ํ•œ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๋ผ๊ณ  ์ง€์‹œํ•ฉ๋‹ˆ๋‹ค.
    • Application Master๋Š” ํ•ด๋‹น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ž‘์—… ์ง„ํ–‰์„ ์ด๊ด„ ๊ด€๋ฆฌํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.
  3. NodeManager๊ฐ€ ์ปจํ…Œ์ด๋„ˆ ์•ˆ์—์„œ Application Master๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
    • NodeManager๋Š” ResourceManager์˜ ์š”์ฒญ์„ ๋ฐ›๊ณ , ์ƒˆ ์ปจํ…Œ์ด๋„ˆ(์ž‘์—… ์‹คํ–‰ ๊ณต๊ฐ„)๋ฅผ ๋งŒ๋“ค์–ด JVM(Java Virtual Machine)์„ ์‹คํ–‰ํ•˜์—ฌ Application Master๋ฅผ ๋„์›๋‹ˆ๋‹ค.
  4. Application Master๊ฐ€ ResourceManager์—๊ฒŒ ํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค.
    • Application Master๋Š” ์ž‘์—…์— ํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค(๋ฉ”๋ชจ๋ฆฌ, CPU, ๋„คํŠธ์›Œํฌ, ์ปจํ…Œ์ด๋„ˆ ๊ฐœ์ˆ˜ ๋“ฑ)๋ฅผ ResourceManager์— ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค.
    • ResourceManager๋Š” ํด๋Ÿฌ์Šคํ„ฐ ์ „์ฒด ๋ฆฌ์†Œ์Šค ์ƒํ™ฉ์„ ํŒŒ์•…ํ•ด, ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” NodeManager ๋ชฉ๋ก์„ Application Master์— ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
  5. Application Master๊ฐ€ ํ• ๋‹น๋ฐ›์€ NodeManager์— ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰์„ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค.
    • ๋ฐ›์€ NodeManager๋“ค์—๊ฒŒ ์‹ค์ œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰์„ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค.
  6. NodeManager๋“ค์ด ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋™์ž‘์‹œํ‚ต๋‹ˆ๋‹ค.
    • NodeManager๋“ค์€ ๊ฐ ์ปจํ…Œ์ด๋„ˆ ์•ˆ์— JVM์„ ์ƒˆ๋กœ ๋„์›Œ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
    • ์ž‘์—…์ด ๋๋‚˜๋ฉด Application Master๋„ ์ข…๋ฃŒ๋˜๊ณ , ResourceManager๋Š” ์ข…๋ฃŒ๋œ Application Master๊ฐ€ ์‚ฌ์šฉํ•˜๋˜ ์ž์›์„ ํ•ด์ œํ•ฉ๋‹ˆ๋‹ค.



์ด์ œ ์ข€ ๋” ์„ธ๋ถ€์ ์œผ๋กœ ๋“ค์—ฌ๋‹ค๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๐Ÿ˜ 1.3.1. client โ–ธ RM : Application ์‹คํ–‰ ์š”์ฒญ

YARN

์ถœ์ฒ˜ : YARN Application ์‹คํ–‰ ์š”์ฒญ ๋‹จ๊ณ„



YARN ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•˜๋ ค๋ฉด ํด๋ผ์ด์–ธํŠธ๊ฐ€ ResourceManager์—๊ฒŒ ์ผ๋ จ์˜ ์š”์ฒญ์„ ์ˆœ์„œ๋Œ€๋กœ ๋ณด๋‚ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์—์„œ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ๋Š” ID๋ฅผ ๋ฐœ๊ธ‰๋ฐ›๊ณ , ์‹คํ–‰ ๊ณ„ํš์„ ์ œ์ถœํ•˜๋ฉฐ, ์‹คํ–‰ ์ƒํƒœ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•  ์ˆ˜ ์žˆ๋Š” ์ •๋ณด๋ฅผ ์–ป๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

  1. ํด๋ผ์ด์–ธํŠธ๊ฐ€ Application ID๋ฅผ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค
    ํด๋ผ์ด์–ธํŠธ๊ฐ€ YARN ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์ƒˆ๋กœ์šด ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•˜๋ ค๋ฉด ๋จผ์ € Application ID๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
    ์ด๋ฅผ ์œ„ํ•ด ClientRMService์˜ createNewApplication() ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.

    ๐Ÿ’ก ์˜ˆ์‹œ:
    ์‚ฌ์šฉ์ž๊ฐ€ Spark ์ž‘์—…์„ ์ œ์ถœํ•˜๋ฉด, Spark ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋‚ด๋ถ€์ ์œผ๋กœ createNewApplication()์„ ํ˜ธ์ถœํ•˜์—ฌ YARN์— ์ƒˆ ์ž‘์—… ID๋ฅผ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค.


  2. YARN์ด Application ID์™€ ๋ฆฌ์†Œ์Šค ์ •๋ณด๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค
    ClientRMService๋Š” ์š”์ฒญ์„ ๋ฐ›๊ณ , ์ƒˆ๋กœ์šด Application ID์™€ ํ•จ๊ป˜ ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ตœ๋Œ€ ๋ฆฌ์†Œ์Šค ์ •๋ณด๋ฅผ ํฌํ•จํ•œ GetNewApplicationResponse ๊ฐ์ฒด๋ฅผ ํด๋ผ์ด์–ธํŠธ์— ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
    ์˜ˆ: ์ตœ๋Œ€ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ฉ”๋ชจ๋ฆฌ, ์ตœ๋Œ€ CPU ์ฝ”์–ด ์ˆ˜ ๋“ฑ

    ๐Ÿ’ก ์˜ˆ์‹œ:
    ํด๋Ÿฌ์Šคํ„ฐ ์ „์ฒด์—์„œ ํ•œ ์ปจํ…Œ์ด๋„ˆ๋‹น 8GB ๋ฉ”๋ชจ๋ฆฌ, 4์ฝ”์–ด๊นŒ์ง€ ํ• ๋‹น ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ์ •๋ณด๊ฐ€ ํ•จ๊ป˜ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค.


  3. ํด๋ผ์ด์–ธํŠธ๊ฐ€ Application ์ œ์ถœ ์š”์ฒญ์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค
    ํด๋ผ์ด์–ธํŠธ๋Š” Application ID๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ๋ฐœ๊ธ‰๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•œ ํ›„, ClientRMService์˜ submitApplication() ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰ ์š”์ฒญ์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค.
    ์ด๋•Œ ApplicationSubmissionContext ๊ฐ์ฒด๋ฅผ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฐ์ฒด์—๋Š” ์‹คํ–‰์— ํ•„์š”ํ•œ ๋‹ค์–‘ํ•œ ์ •๋ณด๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค:

    • Application ID
    • Application Name (์˜ˆ: โ€œETL Job for 2025-06-03โ€)
    • Queue name (์˜ˆ: โ€œdefaultโ€, โ€œetlโ€)
    • Application Priority
    • ํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค (๋ฉ”๋ชจ๋ฆฌ, CPU ๋“ฑ)
    • Application Master ์‹คํ–‰ ๋ช…๋ น์ด ๋‹ด๊ธด ContainerLaunchContext

    ๐Ÿ’ก ์˜ˆ์‹œ:
    โ€œspark-etl-jobโ€์ด๋ผ๋Š” ์ž‘์—…์„ etl ํ์— ์ œ์ถœํ•˜๋ฉฐ, ๋ฉ”๋ชจ๋ฆฌ 4GB, CPU 2์ฝ”์–ด, ์‹คํ–‰ ๋ช…๋ น์€ spark-submit์œผ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.


  4. ํด๋ผ์ด์–ธํŠธ๊ฐ€ Application ์ƒํƒœ๋ฅผ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค
    ํด๋ผ์ด์–ธํŠธ๋Š” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ •์ƒ์ ์œผ๋กœ ๋“ฑ๋ก๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด getApplicationReport()๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.


  5. ResourceManager๊ฐ€ ApplicationReport๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค
    ResourceManager๋Š” ์š”์ฒญ์— ๋”ฐ๋ผ ํ•ด๋‹น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ƒํƒœ ๋ฐ ์‹คํ–‰ ์ •๋ณด๋ฅผ ๋‹ด์€ ApplicationReport ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
    ์ด ๋ณด๊ณ ์„œ๋Š” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์‹คํ–‰ ์ƒํƒœ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•  ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

    ApplicationReport์— ํฌํ•จ๋œ ์ •๋ณด:

    ํ•ญ๋ชฉ ์„ค๋ช…
    Application ID ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ณ ์œ  ID
    User ์‹คํ–‰ํ•œ ์‚ฌ์šฉ์ž ์ด๋ฆ„
    Queue ์‹คํ–‰๋œ ํ ์ด๋ฆ„
    Application Name ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ด๋ฆ„
    ApplicationMaster Host ApplicationMaster๊ฐ€ ์‹คํ–‰ ์ค‘์ธ ๋…ธ๋“œ
    RPC Port ApplicationMaster์˜ ํ†ต์‹  ํฌํŠธ
    Tracking URL ์›น UI์—์„œ ์ƒํƒœ ์ถ”์  ๊ฐ€๋Šฅ ๋งํฌ
    YarnApplicationState ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒํƒœ (์˜ˆ: SUBMITTED, RUNNING, FINISHED ๋“ฑ)
    Diagnostic Info ์˜ค๋ฅ˜ ๋ฐœ์ƒ ์‹œ ๋ฉ”์‹œ์ง€
    Start Time ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹œ์ž‘ ์‹œ๊ฐ
    Client Token ๋ณด์•ˆ ์„ค์ •์ด ํ™œ์„ฑํ™”๋œ ๊ฒฝ์šฐ ์ธ์ฆ ํ† ํฐ

    ๐Ÿ’ก ์˜ˆ์‹œ:
    ํด๋ผ์ด์–ธํŠธ๋Š” ์ด ์ •๋ณด๋ฅผ ์ฃผ๊ธฐ์ ์œผ๋กœ ์กฐํšŒํ•ด ์ž‘์—… ์ง„ํ–‰ ์ƒํƒœ๋‚˜ ์‹คํŒจ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜๊ณ , ๋Œ€์‹œ๋ณด๋“œ๋‚˜ ๋ชจ๋‹ˆํ„ฐ๋ง ์‹œ์Šคํ…œ์—์„œ ์‹œ๊ฐํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๐Ÿ˜ 1.3.2. RM โ–ธ NM : Application Master ์‹คํ–‰ ์š”์ฒญ

YARN

์ถœ์ฒ˜ : YARN Application Master ์‹คํ–‰ ์š”์ฒญ ๋‹จ๊ณ„



ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ œ์ถœ์„ ์™„๋ฃŒํ•˜๋ฉด, ์ด์ œ YARN์€ ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด๋ถ€์—์„œ ApplicationMaster๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ๋ณธ๊ฒฉ์ ์œผ๋กœ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์€ ResourceManager์˜ ๋‚ด๋ถ€ ๊ตฌ์„ฑ ์š”์†Œ๋“ค๊ณผ NodeManager ๊ฐ„์˜ ํ˜‘์—…์„ ํ†ตํ•ด ์ด๋ค„์ง‘๋‹ˆ๋‹ค.

  1. RMAppManager๊ฐ€ ApplicationMaster ์‹คํ–‰์„ ์œ„ํ•œ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค
    ResourceManager์˜ ๊ตฌ์„ฑ ์š”์†Œ ์ค‘ ํ•˜๋‚˜์ธ RMAppManager๋Š” YARN ๋‚ด๋ถ€ ์Šค์ผ€์ค„๋Ÿฌ์—๊ฒŒ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋“ฑ๋ก ์š”์ฒญ๊ณผ ํ•จ๊ป˜ ApplicationMaster ์‹คํ–‰์„ ์œ„ํ•œ ์ปจํ…Œ์ด๋„ˆ ํ• ๋‹น์„ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค.


  2. ApplicationAttemptId๊ฐ€ ํ์— ๋“ฑ๋ก๋ฉ๋‹ˆ๋‹ค
    YARN์€ ํ•ด๋‹น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰ ์‹œ๋„๋ฅผ ๊ณ ์œ ํ•˜๊ฒŒ ์‹๋ณ„ํ•˜๊ธฐ ์œ„ํ•ด ApplicationAttemptId๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ์ด๋ฅผ ํ์— ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค.
    ๊ทธ๋ฆฌ๊ณ  RMAppAttemptEventType.ATTEMPT_ADDED ์ด๋ฒคํŠธ๋ฅผ ๋ฐœ์ƒ์‹œ์ผœ ๋“ฑ๋ก์ด ์™„๋ฃŒ๋˜์—ˆ์Œ์„ ์•Œ๋ ค์ค๋‹ˆ๋‹ค.

    ๐Ÿ’ก ์˜ˆ์‹œ:
    ํ•˜๋‚˜์˜ Spark ์ž‘์—…์ด ์‹คํŒจ ํ›„ ์žฌ์‹œ๋„๋˜๋Š” ๊ฒฝ์šฐ, ์ƒˆ๋กœ์šด ApplicationAttemptId๊ฐ€ ์ƒ์„ฑ๋˜์–ด ํ์— ๋‹ค์‹œ ๋“ฑ๋ก๋ฉ๋‹ˆ๋‹ค.


  3. ์Šค์ผ€์ค„๋Ÿฌ์—๊ฒŒ ์ปจํ…Œ์ด๋„ˆ ํ• ๋‹น์„ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค
    RMAppManager๋Š” ์Šค์ผ€์ค„๋Ÿฌ์—๊ฒŒ ApplicationMaster ์‹คํ–‰์— ํ•„์š”ํ•œ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํ• ๋‹นํ•ด๋‹ฌ๋ผ๊ณ  ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค.


  4. ์Šค์ผ€์ค„๋Ÿฌ๊ฐ€ ์ปจํ…Œ์ด๋„ˆ ํ• ๋‹น ํ›„ START ์ด๋ฒคํŠธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค
    ์Šค์ผ€์ค„๋Ÿฌ๋Š” ์ ์ ˆํ•œ NodeManager์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฆฌ์†Œ์Šค๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํ• ๋‹นํ•˜๊ณ , ApplicationMaster ์‹คํ–‰์„ ์œ„ํ•œ RMContainerEventType.START ์ด๋ฒคํŠธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.


  5. RMAppManager๊ฐ€ ApplicationMasterLauncher๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค
    ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ํ• ๋‹น๋˜๋ฉด, RMAppManager๋Š” ApplicationMasterLauncher๋ฅผ ํ†ตํ•ด ์‹ค์ œ ApplicationMaster ์‹คํ–‰์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.


  6. ApplicationMasterLauncher๊ฐ€ AMLauncher๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค
    ApplicationMasterLauncher๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ AMLauncher๋ฅผ ๊ตฌ๋™ํ•˜์—ฌ ApplicationMaster๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.


  7. AMLauncher๊ฐ€ NodeManager์— ApplicationMaster ์‹คํ–‰์„ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค
    AMLauncher๋Š” ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰์— ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ๋‹ด์€ ContainerLaunchContext๋ฅผ ์ค€๋น„ํ•˜๊ณ , ์ด๋ฅผ NodeManager์—๊ฒŒ ์ „๋‹ฌํ•˜์—ฌ ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰์„ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค.

    ContainerLaunchContext์— ํฌํ•จ๋˜๋Š” ์ •๋ณด:

    ํ•ญ๋ชฉ ์„ค๋ช…
    ContainerId ์ปจํ…Œ์ด๋„ˆ ๊ณ ์œ  ์‹๋ณ„์ž
    Resource ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ ๋ฐ CPU ๋“ฑ ๋ฆฌ์†Œ์Šค
    User ํ•ด๋‹น ์ปจํ…Œ์ด๋„ˆ์— ํ• ๋‹น๋œ ์‚ฌ์šฉ์ž
    Security Tokens ๋ณด์•ˆ์ด ํ™œ์„ฑํ™”๋œ ๊ฒฝ์šฐ ํ•„์š”ํ•œ ํ† ํฐ
    LocalResources ์‹คํ–‰์— ํ•„์š”ํ•œ jar, ๋ฐ”์ด๋„ˆ๋ฆฌ, shared-objects, side files ๋“ฑ
    Service Data (์„ ํƒ) ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „์šฉ ์„œ๋น„์Šค ๋ฐ์ดํ„ฐ
    Environment Variables ์‹คํ–‰ ์‹œ ํ•„์š”ํ•œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜
    Launch Command ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ ๋ช…๋ น์–ด
    Retry Strategy ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹คํŒจํ•  ๊ฒฝ์šฐ ์žฌ์‹œ๋„ ์ „๋žต

    ๐Ÿ’ก ์˜ˆ์‹œ:
    Spark์˜ ApplicationMaster๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ spark-submit ๋ช…๋ น์„ launch command๋กœ ์ „๋‹ฌํ•˜๊ณ , ์‹คํ–‰์— ํ•„์š”ํ•œ spark-assembly.jar ๋“ฑ์„ local resource๋กœ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.


  8. NodeManager๊ฐ€ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค
    NodeManager๋Š” ์ „๋‹ฌ๋ฐ›์€ ์ปจํ…์ŠคํŠธ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•˜๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ StartContainersResponse์— ๋‹ด์•„ AMLauncher์— ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

    ๐Ÿ’ก ์˜ˆ์‹œ:
    ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰๋˜๋ฉด, NodeManager๋Š” SUCCESS ์ƒํƒœ์™€ ํ•จ๊ป˜ ์ปจํ…Œ์ด๋„ˆ์˜ ์ƒํƒœ ์ •๋ณด๋ฅผ ํฌํ•จํ•œ ์‘๋‹ต์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ˜ 1.3.3. NM โ–ธ AM : JVM์œผ๋กœ Application Master ์‹คํ–‰

NodeManager๋Š” ResourceManager์˜ ์š”์ฒญ์— ๋”ฐ๋ผ ์ง€์ •๋œ ์ปจํ…Œ์ด๋„ˆ ์•ˆ์—์„œ ApplicationMaster๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
์ด ๊ณผ์ •์€ ์‹ค์ œ๋กœ ์ƒˆ๋กœ์šด JVM ํ”„๋กœ์„ธ์Šค๋ฅผ ์ƒ์„ฑํ•ด์„œ ApplicationMaster๋ฅผ ๊ตฌ๋™์‹œํ‚ค๋Š” ๋ฐฉ์‹์œผ๋กœ ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค.

ApplicationMaster๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด NodeManager๋Š” ContainerLaunchContext๋ผ๋Š” ์‹คํ–‰ ์ปจํ…์ŠคํŠธ ์ •๋ณด๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
์ด ์ปจํ…์ŠคํŠธ์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์‹คํ–‰์— ํ•„์š”ํ•œ ์ •๋ณด๋“ค์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค:

  • ์ปจํ…Œ์ด๋„ˆ ID
  • ํ• ๋‹น๋œ ๋ฆฌ์†Œ์Šค ์ •๋ณด (๋ฉ”๋ชจ๋ฆฌ, CPU ๋“ฑ)
  • ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•  ์‚ฌ์šฉ์ž ์ •๋ณด
  • ๋ฐ”์ด๋„ˆ๋ฆฌ๋‚˜ JAR ํŒŒ์ผ ๋“ฑ ๋กœ์ปฌ ๋ฆฌ์†Œ์Šค
  • ํ™˜๊ฒฝ ๋ณ€์ˆ˜
  • ์‹คํ–‰ ๋ช…๋ น์–ด (command)
  • ๋ณด์•ˆ ํ† ํฐ (ํ•„์š”ํ•œ ๊ฒฝ์šฐ)
  • ์‹คํŒจ ์‹œ ์žฌ์‹œ๋„ ์ „๋žต ๋“ฑ


๐Ÿ’ก ์˜ˆ์‹œ:
ContainerLaunchContext์˜ command ํ•„๋“œ์—๋Š” "java -Xmx1024m com.example.MyAppMaster" ์™€ ๊ฐ™์€ ์‹ค์ œ ์‹คํ–‰ ๋ช…๋ น์–ด๊ฐ€ ์„ค์ •๋ฉ๋‹ˆ๋‹ค.



NodeManager๋Š” ์ด ์ปจํ…์ŠคํŠธ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ JVM์„ ์ƒ์„ฑํ•˜๊ณ  ApplicationMaster๋ฅผ ๊ตฌ๋™ํ•ฉ๋‹ˆ๋‹ค.
ApplicationMaster๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰๋˜๋ฉด, ์ดํ›„ ๋‹จ๊ณ„์—์„œ ResourceManager์— ๋“ฑ๋ก ์š”์ฒญ์„ ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.


๐Ÿ˜ 1.3.4. AM โ–ธ RM : ํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค ์š”์ฒญ, NM ๋ชฉ๋ก ๋ฐ˜ํ™˜ ๋ฐ Application Master ๋“ฑ๋ก

NodeManager๊ฐ€ ApplicationMaster๋ฅผ ์„ฑ๊ณต์ ์œผ๋กœ ์‹คํ–‰ํ•œ ํ›„์—๋Š”, ํ•ด๋‹น ApplicationMaster๊ฐ€ ๋ฐ˜๋“œ์‹œ ResourceManager์— ๋“ฑ๋ก๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์ด ๊ณผ์ •์„ ํ†ตํ•ด ResourceManager๋Š” ApplicationMaster์—๊ฒŒ ์ ์ ˆํ•œ ์ž์›์„ ํ• ๋‹นํ•˜๊ฑฐ๋‚˜ ์ƒํƒœ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๋“ฑ๋ก ๊ณผ์ •์— ๋“ค์–ด๊ฐ€๊ธฐ ์ „์—, ๋จผ์ € ApplicationMaster์™€ ResourceManager๊ฐ€ ์–ด๋–ป๊ฒŒ ํ†ต์‹ ํ•˜๋Š”์ง€ ๊ฐ„๋‹จํžˆ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋‘ ์ปดํฌ๋„ŒํŠธ๋Š” ApplicationMasterProtocol์ด๋ผ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ์ƒํ˜ธ์ž‘์šฉํ•ฉ๋‹ˆ๋‹ค.
YARN์€ ์ด ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ๊ธฐ๋ณธ ํด๋ผ์ด์–ธํŠธ๋กœ ๋‹ค์Œ ๋‘ ๊ฐ€์ง€๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

  • AMRMClient
  • AMRMClientAsync

ํ•„์š”ํ•˜๋‹ค๋ฉด ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ApplicationMasterProtocol์„ ๊ตฌํ˜„ํ•˜์—ฌ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

ApplicationMasterProtocol์—์„œ ์ œ๊ณตํ•˜๋Š” ์ฃผ์š” ๋ฉ”์†Œ๋“œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค:

๋ฉ”์†Œ๋“œ ์„ค๋ช…
registerApplicationMaster(request) ApplicationMaster๋ฅผ ResourceManager์— ๋“ฑ๋ก
allocate(request) ์ž์› ์š”์ฒญ ๋ฐ ์ƒํƒœ ๋ณด๊ณ  (heartbeat ํฌํ•จ)
finishApplicationMaster(request) ์‹คํ–‰ ์™„๋ฃŒ ํ›„ ์ข…๋ฃŒ ์ฒ˜๋ฆฌ ์š”์ฒญ

์ด์ œ ๋ณธ๊ฒฉ์ ์œผ๋กœ ApplicationMaster๊ฐ€ ์–ด๋–ป๊ฒŒ ๋“ฑ๋ก๋˜๋Š”์ง€ ๊ตฌ์ฒด์ ์ธ ๊ณผ์ •์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

YARN

์ถœ์ฒ˜ : YARN Application Master ๋“ฑ๋ก ๋‹จ๊ณ„


  1. ApplicationMaster๊ฐ€ ResourceManager์— ๋“ฑ๋ก ์š”์ฒญ

    ApplicationMaster๋Š” registerApplicationMaster() ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ResourceManager์— ์ž์‹ ์„ ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค.

    ์ด๋•Œ ์ „๋‹ฌ๋˜๋Š” RegisterApplicationMasterRequest ์•ˆ์—๋Š” ๋‹ค์Œ ์ •๋ณด๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

    • ApplicationMaster๊ฐ€ ์‹คํ–‰ ์ค‘์ธ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„
    • RPC ํฌํŠธ
    • ์‚ฌ์šฉ์ž๊ฐ€ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒํƒœ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” Tracking URL

    ๐Ÿ’ก ์˜ˆ์‹œ:
    Spark์˜ ApplicationMaster๋Š” spark://worker-node1:7077 ๊ฐ™์€ RPC ํฌํŠธ์™€ Web UI ์ฃผ์†Œ๋ฅผ ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค.


  2. ResourceManager๊ฐ€ ๋“ฑ๋ก ์ฒ˜๋ฆฌ ๋ฐ ์‘๋‹ต

    ResourceManager์˜ ApplicationMasterService๋Š” ๋“ฑ๋ก ์š”์ฒญ์„ ๋ฐ›์€ ํ›„, ํ•ด๋‹น ApplicationMaster๋ฅผ ๋‚ด๋ถ€ ๋ชฉ๋ก์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  RegisterApplicationMasterResponse๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

    ์ด ์‘๋‹ต์€ AllocateResponse ํ˜•ํƒœ๋กœ ๊ตฌ์„ฑ๋˜๋ฉฐ ๋‹ค์Œ ์ •๋ณด๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

    • ์ค‘๋ณต ์‘๋‹ต ๋ฐฉ์ง€๋ฅผ ์œ„ํ•œ Response ID
    • AM์—๊ฒŒ ์ „๋‹ฌ๋˜๋Š” ๋ช…๋ น์–ด (e.g., ์žฌ์‹œ์ž‘, ์ข…๋ฃŒ ๋“ฑ)
    • ์ƒˆ๋กญ๊ฒŒ ํ• ๋‹น๋œ ์ปจํ…Œ์ด๋„ˆ ๋ชฉ๋ก
    • ์ข…๋ฃŒ๋œ ์ปจํ…Œ์ด๋„ˆ๋“ค์˜ ์ƒํƒœ
    • ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ํ˜„์žฌ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ฆฌ์†Œ์Šค ์–‘ (headroom)
    • ๋ณ€๊ฒฝ๋œ ๋…ธ๋“œ ์ƒํƒœ ๋ชฉ๋ก
    • ์ „์ฒด ๋…ธ๋“œ ์ˆ˜
    • ๋ฐ˜ํ™˜ ์š”์ฒญ๋œ ๋ฆฌ์†Œ์Šค
    • (๋ณด์•ˆ ํ™œ์„ฑํ™” ์‹œ) AMRMToken
    • ๋ฆฌ์†Œ์Šค๊ฐ€ ์ฆ๊ฐ€ ๋˜๋Š” ๊ฐ์†Œ๋œ ์ปจํ…Œ์ด๋„ˆ ๋ชฉ๋ก


  3. ApplicationMaster๊ฐ€ allocate ๋ฉ”์†Œ๋“œ๋กœ ๋ฆฌ์†Œ์Šค๋ฅผ ์š”์ฒญ

    ApplicationMaster๋Š” ์ดํ›„ ์ฃผ๊ธฐ์ ์œผ๋กœ allocate() ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

    • ํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค ์š”์ฒญ (์˜ˆ: ์ปจํ…Œ์ด๋„ˆ ๊ฐœ์ˆ˜, ์œ„์น˜, ์‚ฌ์–‘ ๋“ฑ)
    • ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํ˜„์žฌ ์ง„ํ–‰๋ฅ  ๋ณด๊ณ 
    • ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ปจํ…Œ์ด๋„ˆ ๋ฐ˜ํ™˜
    • ์‹คํ–‰ ์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ์˜ ๋ฆฌ์†Œ์Šค ๋ณ€๊ฒฝ ์š”์ฒญ

    ๐Ÿ’ก allocate() ๋ฉ”์†Œ๋“œ๋Š” ์ƒํƒœ ์œ ์ง€๋ฅผ ์œ„ํ•œ heartbeat ์—ญํ• ๋„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
    AM์€ ํ•„์š”ํ•œ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํ•œ ๋ฒˆ์— ๋ชป ๋ฐ›์•„๋„ ์ด ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด ์ ์ง„์ ์œผ๋กœ ๋ฆฌ์†Œ์Šค๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    AMRMClientAsync๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ๊ธฐ๋ณธ ํ˜ธ์ถœ ๊ฐ„๊ฒฉ์€ 1์ดˆ์ž…๋‹ˆ๋‹ค.


  4. ResourceManager๊ฐ€ ์š”์ฒญ์„ ์Šค์ผ€์ค„๋Ÿฌ์—๊ฒŒ ์œ„์ž„

    ApplicationMasterService๋Š” ๋ฐ›์€ allocate ์š”์ฒญ์„ ๋‚ด๋ถ€ ์Šค์ผ€์ค„๋Ÿฌ์—๊ฒŒ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
    ์Šค์ผ€์ค„๋Ÿฌ๋Š” ์š”์ฒญ๋œ ์ž์›์ด ๊ฐ€์šฉํ•œ์ง€ ํ™•์ธํ•˜๊ณ , ๊ฐ€๋Šฅํ•  ๊ฒฝ์šฐ ํ•ด๋‹น ๋ฆฌ์†Œ์Šค๋ฅผ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค.
    ๊ฒฐ๊ณผ๋Š” ๋‹ค์‹œ AllocateResponse์— ๋‹ด๊ฒจ ApplicationMaster๋กœ ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค.

    ๐Ÿ’ก ์˜ˆ์‹œ:
    ์Šค์ผ€์ค„๋Ÿฌ๋Š” ์‚ฌ์šฉ์ž์˜ ํ, ์šฐ์„ ์ˆœ์œ„, ํ˜„์žฌ ํด๋Ÿฌ์Šคํ„ฐ ์ƒํƒœ ๋“ฑ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž์› ํ• ๋‹น ์—ฌ๋ถ€๋ฅผ ํŒ๋‹จํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ˜ 1.3.5. AM โ–ธ NM : ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰

YARN

์ถœ์ฒ˜ : YARN ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ ๋ฐ Application ์‹คํ–‰ ๋‹จ๊ณ„


ApplicationMaster๋Š” ์ž์‹ ์ด ํ• ๋‹น๋ฐ›์€ ์ปจํ…Œ์ด๋„ˆ์—์„œ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด ApplicationMaster๋Š” NodeManager์™€ ์ƒํ˜ธ์ž‘์šฉํ•ฉ๋‹ˆ๋‹ค.

  1. ApplicationMaster์˜ ํด๋ผ์ด์–ธํŠธ๋Š” NodeManager์—๊ฒŒ ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰์„ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค.
    ์ด๋•Œ ์‚ฌ์šฉ๋˜๋Š” StartContainersRequest์—๋Š” ๋‹ค์Œ ์ •๋ณด๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
    • ํ• ๋‹น๋œ ๋ฆฌ์†Œ์Šค (๋ฉ”๋ชจ๋ฆฌ, CPU ๋“ฑ)
    • ๋ณด์•ˆ ํ† ํฐ (๋ณด์•ˆ์ด ํ™œ์„ฑํ™”๋œ ๊ฒฝ์šฐ)
    • ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹œ์ž‘ํ•˜๊ธฐ ์œ„ํ•œ ์‹คํ–‰ ๋ช…๋ น์–ด
    • ํ”„๋กœ์„ธ์Šค ํ™˜๊ฒฝ ๋ณ€์ˆ˜
    • ํ•„์š”ํ•œ ๋ฐ”์ด๋„ˆ๋ฆฌ, JAR ํŒŒ์ผ, ๊ณต์œ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋“ฑ


  2. NodeManager์˜ ContainerManager๋Š” startContainer ๋ฉ”์†Œ๋“œ๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
    ContainerManager๋Š” ApplicationMaster๊ฐ€ ์š”์ฒญํ•œ ๋Œ€๋กœ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•˜๊ณ , ์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ StartContainersResponse๋กœ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
    StartContainersResponse๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ •๋ณด๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.
    • getAllServicesMetaData() : ์‹คํ–‰๋œ ์„œ๋น„์Šค์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ
    • getFailedRequests() : ์‹คํŒจํ•œ ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ ์š”์ฒญ ๋ชฉ๋ก
    • getSuccessfullyStartedContainers() : ์„ฑ๊ณต์ ์œผ๋กœ ์‹œ์ž‘๋œ ์ปจํ…Œ์ด๋„ˆ ๋ชฉ๋ก


๐Ÿ’ก ์˜ˆ์‹œ:
ApplicationMaster๊ฐ€ NodeManager์— ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰์„ ์š”์ฒญํ–ˆ์„ ๋•Œ,
NodeManager๊ฐ€ ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ 4GB, CPU 2๊ฐœ๋ฅผ ๊ฐ€์ง„ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹œ์ž‘ํ•˜๊ณ , ์‹คํ–‰ ๋ช…๋ น์–ด๋กœ java -jar app.jar๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
์‹คํ–‰์ด ์„ฑ๊ณตํ•˜๋ฉด StartContainersResponse์—์„œ ์„ฑ๊ณต์ ์œผ๋กœ ์‹œ์ž‘๋œ ์ปจํ…Œ์ด๋„ˆ ๋ชฉ๋ก์— ํ•ด๋‹น ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ํฌํ•จ๋˜์–ด ํด๋ผ์ด์–ธํŠธ์— ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค.


๐Ÿ˜ 1.3.6. NM โ–ธ Container : Application ์‹คํ–‰

์‚ฌ์‹ค ์œ„ ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ ๊ณผ์ •๊ณผ Application ์‹คํ–‰ ๊ณผ์ •์„ ํ•˜๋‚˜๋กœ ํ†ตํ•ฉํ•˜์—ฌ ๋ด๋„ ์ข‹์Šต๋‹ˆ๋‹ค.

  1. ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์‹คํ–‰๋œ ์ดํ›„, ApplicationMaster๋Š” getContainerStatuses()๋ฅผ ์ฃผ๊ธฐ์ ์œผ๋กœ ํ˜ธ์ถœํ•˜์—ฌ ๊ฐ ์ปจํ…Œ์ด๋„ˆ์˜ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒํƒœ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•ฉ๋‹ˆ๋‹ค.

  2. NodeManager์˜ ContainerManager๋Š” ApplicationMaster๊ฐ€ ์š”์ฒญํ•œ ์ปจํ…Œ์ด๋„ˆ ์ƒํƒœ๋ฅผ GetContainerStatusesResponse๋กœ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ด ์‘๋‹ต์—๋Š” ์ปจํ…Œ์ด๋„ˆ์˜ ์ƒํƒœ ์ •๋ณด๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.


๐Ÿ’ก ์˜ˆ์‹œ:
ApplicationMaster๊ฐ€ ์ฃผ๊ธฐ์ ์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ ์ƒํƒœ๋ฅผ ์กฐํšŒํ•  ๋•Œ,
NodeManager๋Š” ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ํ˜„์žฌ RUNNING ์ƒํƒœ์ž„์„ ์‘๋‹ตํ•˜๊ณ , ๋งŒ์•ฝ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์œผ๋ฉด ์˜ค๋ฅ˜ ์ •๋ณด๋ฅผ ํฌํ•จํ•˜์—ฌ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
์ด๋ฅผ ํ†ตํ•ด ApplicationMaster๋Š” ๊ฐ ์ปจํ…Œ์ด๋„ˆ์˜ ์ƒํƒœ๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๐Ÿ˜ 1.3.7. Application Master ์ข…๋ฃŒ

YARN

์ถœ์ฒ˜ : YARN Application Master ์ข…๋ฃŒ ๋‹จ๊ณ„



์ปจํ…Œ์ด๋„ˆ์—์„œ ์‹คํ–‰ํ–ˆ๋˜ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜๋“ค์ด ์ข…๋ฃŒ๋˜๋ฉด, ApplicationMaster๋„ ์ข…๋ฃŒ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
ApplicationMaster๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด ํ•˜๋‚˜์˜ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ผ์ดํ”„์‚ฌ์ดํด์ด ์™„์ „ํžˆ ์ข…๋ฃŒ๋˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  1. ApplicationMaster์˜ ํด๋ผ์ด์–ธํŠธ๋Š” ResourceManager์—๊ฒŒ ApplicationMaster ์ข…๋ฃŒ๋ฅผ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค.

  2. ResourceManager์˜ ApplicationMasterService๋Š” ํ•ด๋‹น ApplicationMaster๋ฅผ ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ํ•ด์ œํ•˜๊ณ , FinishApplicationMasterResponse๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

    • FinishApplicationMasterResponse์—๋Š” getIsUnregistered()๋ผ๋Š” boolean ๋ฉ”์†Œ๋“œ๊ฐ€ ์žˆ์–ด์„œ, ์ •์ƒ์ ์ธ ํ•ด์ œ์™€ ์ข…๋ฃŒ ๊ฐ€๋Šฅ ์—ฌ๋ถ€๋ฅผ ์•Œ๋ ค์ค๋‹ˆ๋‹ค.
    • ๋งŒ์•ฝ getIsUnregistered()๊ฐ€ true๊ฐ€ ๋˜๊ธฐ ์ „์— Application์ด ๋จผ์ € ๋ฉˆ์ถ˜๋‹ค๋ฉด, ResourceManager๋Š” ํ•ด๋‹น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์žฌ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ’ก ์˜ˆ์‹œ:
์–ด๋–ค ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ •์ƒ์ ์œผ๋กœ ์ž‘์—…์„ ๋งˆ์น˜๊ณ  ์ข…๋ฃŒ ์‹ ํ˜ธ๋ฅผ ๋ณด๋‚ด๋ฉด, ResourceManager๋Š” ์ด ์š”์ฒญ์„ ๋ฐ›์•„ ApplicationMaster๋ฅผ ํ•ด์ œํ•˜๊ณ , getIsUnregistered()๊ฐ€ true์ธ ์‘๋‹ต์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
๋ฐ˜๋ฉด, ์ž‘์—…์ด ๊ฐ‘์ž๊ธฐ ์ค‘๋‹จ๋˜๊ฑฐ๋‚˜ ๋น„์ •์ƒ ์ข…๋ฃŒ๋˜๋ฉด, ResourceManager๋Š” ์žฌ์‹œ๋„๋ฅผ ์œ„ํ•ด ApplicationMaster๋ฅผ ๋‹ค์‹œ ์‹คํ–‰์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๐Ÿ˜ 1.3.8. Auxiliary Service

YARN์—์„œ Auxiliary Service(๋ณด์กฐ ์„œ๋น„์Šค)๋Š” NodeManager ๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›๊ฑฐ๋‚˜ ์„œ๋น„์Šค ์ œ์–ด๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.

ํŠนํžˆ ํ•˜๋‘ก ๋งต๋ฆฌ๋“€์Šค ์ž‘์—…์—์„œ, ๋งต ํƒœ์Šคํฌ์™€ ๋ฆฌ๋“€์Šค ํƒœ์Šคํฌ ์‚ฌ์ด์˜ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ ๊ณผ์ •์ธ โ€˜์…”ํ”Œ(Shuffle)โ€™์„ ์›ํ™œํžˆ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐ ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

๋งต ํƒœ์Šคํฌ๋Š” ๊ฐ ๋…ธ๋“œ์˜ NodeManager๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ(Container) ๋‚ด์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ๋งต ํƒœ์Šคํฌ๊ฐ€ ์ž‘์—…ํ•œ ์ค‘๊ฐ„ ๊ฒฐ๊ณผ ๋ฐ์ดํ„ฐ๋Š” ๋ฆฌ๋“€์Šค ํƒœ์Šคํฌ๊ฐ€ ์‹คํ–‰๋˜๋Š” ๋‹ค๋ฅธ ๋…ธ๋“œ์˜ ์ปจํ…Œ์ด๋„ˆ๋กœ ์ „๋‹ฌ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ, NodeManager๋Š” ์ปจํ…Œ์ด๋„ˆ ๋‚ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ข…๋ฃŒ๋˜๋ฉด ํ•ด๋‹น ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ฆ‰์‹œ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ ๋งต ํƒœ์Šคํฌ๊ฐ€ ๋๋‚˜๋ฉด์„œ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด, ๋งต ํƒœ์Šคํฌ๊ฐ€ ๋งŒ๋“  ์ค‘๊ฐ„ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ฑฐ๋‚˜ ๋ฆฌ๋“€์Šค ํƒœ์Šคํฌ์— ์ „๋‹ฌํ•  ์ˆ˜ ์—†๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๊ทธ ๊ฒฐ๊ณผ, ๋ฆฌ๋“€์Šค ํƒœ์Šคํฌ๊ฐ€ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์ง€ ๋ชปํ•ด ๋ฆฌ๋“€์Šค ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์ฆ‰, ๋งต ํƒœ์Šคํฌ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๊ธฐ ์ „์— ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‚ฌ๋ผ์ง€๋ฉด, ๋ฆฌ๋“€์Šค ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†๊ฒŒ ๋˜์–ด ์ „์ฒด ์ž‘์—… ํ๋ฆ„์ด ๋ฉˆ์ถ”๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฐ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด YARN์€ Auxiliary Service๋ฅผ ํ†ตํ•ด NodeManager ๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์•ˆ์ •์ ์œผ๋กœ ์ „์†กํ•  ์ˆ˜ ์žˆ๋Š” ๋ณ„๋„์˜ ์„œ๋น„์Šค ์ฑ„๋„์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ข…๋ฃŒ๋˜๋”๋ผ๋„ ๋งต์—์„œ ๋ฆฌ๋“€์Šค๋กœ์˜ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ(์…”ํ”Œ)์ด ์›ํ™œํžˆ ์ด๋ฃจ์–ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ Auxiliary Service๋Š” ๋งต๋ฆฌ๋“€์Šค ์ž‘์—…์˜ ํ•ต์‹ฌ ๋‹จ๊ณ„์ธ ์…”ํ”Œ ์ž‘์—…์„ ์„ฑ๊ณต์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ํ•„์ˆ˜์ ์ธ ๋ณด์กฐ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.

YARN

์ถœ์ฒ˜ : YARN Application Master ์ข…๋ฃŒ ๋‹จ๊ณ„



๋™์ž‘ ๊ณผ์ •์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ResourceManager์—๊ฒŒ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰์„ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค.

  2. ResourceManager๋Š” ํ•ด๋‹น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ApplicationMaster๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  3. YARN์€ ๋งต๋ฆฌ๋“€์Šค ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ApplicationMaster๋กœ MRAppMaster๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
    • ResourceManager๊ฐ€ ApplicationMaster ์‹คํ–‰์„ ์š”์ฒญํ•˜๋ฉด NodeManager๊ฐ€ ์ปจํ…Œ์ด๋„ˆ์—์„œ MRAppMaster๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  4. MRAppMaster๋Š” ๋‹ค๋ฅธ NodeManager์—๊ฒŒ ๋งต ํƒœ์Šคํฌ ์‹คํ–‰์„ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค.

  5. NodeManager๋Š” ์ปจํ…Œ์ด๋„ˆ์—์„œ ๋งต ํƒœ์Šคํฌ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  6. ๋งต ํƒœ์Šคํฌ๊ฐ€ ์ˆ˜ํ–‰ํ•œ ๊ฒฐ๊ณผ๋Š” ์…”ํ”Œ ๊ณผ์ •์„ ํ†ตํ•ด ๋ฆฌ๋“€์Šค ํƒœ์Šคํฌ์— ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค.
    • ์…”ํ”Œ(Shuffle)์„ ๋‹ด๋‹นํ•˜๋Š” ๊ธฐ๋ณธ ํด๋ž˜์Šค๋Š” ํ•˜๋‘ก์˜ mapred ํŒจํ‚ค์ง€์— ๊ตฌํ˜„๋œ ShuffleHandler์ž…๋‹ˆ๋‹ค.


๐Ÿ’ก ์˜ˆ์‹œ
์˜ˆ๋ฅผ ๋“ค์–ด, ๋งต ํƒœ์Šคํฌ๊ฐ€ ๋…ธ๋“œ A์˜ ์ปจํ…Œ์ด๋„ˆ์—์„œ ์‹คํ–‰๋˜๊ณ , ๋ฆฌ๋“€์Šค ํƒœ์Šคํฌ๊ฐ€ ๋…ธ๋“œ B์—์„œ ์‹คํ–‰๋  ๋•Œ,
๋…ธ๋“œ A์˜ NodeManager๋Š” Auxiliary Service๋ฅผ ํ†ตํ•ด ์ค‘๊ฐ„ ๋ฐ์ดํ„ฐ๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ๋…ธ๋“œ B์˜ NodeManager๋กœ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
์ด ๊ณผ์ •์—์„œ ShuffleHandler๊ฐ€ ์…”ํ”Œ ๋ฐ์ดํ„ฐ๋ฅผ ์ค‘๊ณ„ํ•˜๋ฉฐ, ๋งต๊ณผ ๋ฆฌ๋“€์Šค ์‚ฌ์ด ๋ฐ์ดํ„ฐ ์ „๋‹ฌ์ด ๋Š๊ธฐ์ง€ ์•Š๋„๋ก ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ˜ 1.3.9. Pluggable Shuffle ๋ฐ Pluggable Sort ์„ค์ •

Pluggable Shuffle ๋ฐ Pluggable Sort๋Š” ์ด Auxiliary Service ์œ„์—์„œ ๋™์ž‘ํ•˜๋Š”, ์…”ํ”Œ ๋‹จ๊ณ„์˜ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ๋ฐฉ์‹์„ ์‚ฌ์šฉ์ž ์ •์˜(customize)ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.

์ฆ‰, ์…”ํ”Œ ๋ฐ์ดํ„ฐ๋ฅผ ์–ด๋–ป๊ฒŒ ์ˆ˜์ง‘(ShuffleConsumerPlugin)ํ•˜๊ณ  ์ •๋ ฌ(MapOutputCollector)ํ• ์ง€๋ฅผ ํ”Œ๋Ÿฌ๊ทธ์ธ ํ˜•ํƒœ๋กœ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์‹œ ๋งํ•ด,
Auxiliary Service๋Š” ์…”ํ”Œ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๋Š” โ€˜๊ธฐ๋ฐ˜ ์ธํ”„๋ผโ€™์ด๊ณ , Pluggable Shuffle/Sort๋Š” ๊ทธ ์œ„์—์„œ ์ž‘๋™ํ•˜๋Š” โ€˜๋™์ž‘ ๋ฐฉ์‹์„ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•ํ•˜๋Š” ๊ธฐ๋Šฅโ€™์ž…๋‹ˆ๋‹ค.

Auxiliary Service๋Š” ๋งต๋ฆฌ๋“€์Šค์˜ ์…”ํ”Œ๊ณผ ์ •๋ ฌ ๋™์ž‘์„ ๋‹ค์Œ ๋‘ ๊ฐ€์ง€ ๋ฐฉ์‹์œผ๋กœ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. Job ์ œ์ถœ ์‹œ ์„ค์ •
    • Job configuration์— ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„์ฒด(์˜ˆ: ShuffleConsumerPlugin, MapOutputCollector)๋ฅผ ํฌํ•จํ•œ ํด๋ž˜์Šค๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
    • ์ด ํด๋ž˜์Šค๋“ค์€ ํ•ด๋‹น Job ํŒจํ‚ค์ง€ ๋‚ด์— ์œ„์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    • ์˜ˆ๋ฅผ ๋“ค์–ด, job-conf.xml ํ˜น์€ ํ”„๋กœ๊ทธ๋žจ ์ฝ”๋“œ ๋‚ด์—์„œ ๊ด€๋ จ ํด๋ž˜์Šค๋ฅผ ์ง€์ •ํ•˜์—ฌ ํŠน์ • ์…”ํ”Œ ๋™์ž‘์„ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•ํ•ฉ๋‹ˆ๋‹ค.
  2. yarn-site.xml ์„ค์ •
    • ํด๋Ÿฌ์Šคํ„ฐ์— ๋ฐฐํฌ๋œ ๋ชจ๋“  ๋…ธ๋“œ์˜ yarn-site.xml ํŒŒ์ผ์— auxiliary-services ๋ฐ ๊ด€๋ จ ์„œ๋น„์Šค ์„ค์ •์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
    • ์ด๋ฅผ ํ†ตํ•ด ํด๋Ÿฌ์Šคํ„ฐ ์ „์ฒด์— ์ปค์Šคํ…€ Auxiliary Service๋ฅผ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์˜ˆ๋ฅผ ๋“ค์–ด ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.
    <property>
        <name>yarn.app.mapreduce.aux-services</name>
        <value>shuffle</value>
    </property>
    <property>
        <name>yarn.app.mapreduce.aux-services.shuffle.class</name>
        <value>org.apache.hadoop.mapred.ShuffleHandler</value>
    </property>
    


    ๐Ÿ’ก ์˜ˆ์‹œ
    ๋งŒ์•ฝ ํŠน์ • ํšŒ์‚ฌ์—์„œ ์ž์ฒด ๊ฐœ๋ฐœํ•œ ์…”ํ”Œ ์ตœ์ ํ™” ๋กœ์ง์„ ์ ์šฉํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด,
    Job ์ œ์ถœ ์‹œ์— ShuffleConsumerPlugin ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค๋ฅผ ์ œ๊ณตํ•˜๊ฑฐ๋‚˜,
    ํด๋Ÿฌ์Šคํ„ฐ ์ „๋ฐ˜์— ์ ์šฉํ•  ๊ฒฝ์šฐ yarn-site.xml์— ํ•ด๋‹น aux-service ์„ค์ •์„ ๋ฐฐํฌํ•ด ์…”ํ”Œ ๋™์ž‘์„ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


์ฐธ๊ณ 
ํ•ด๋‹น ๋‚ด์šฉ์€ YARN ๊ณต์‹ ๋งค๋‰ด์–ผ ์ž๋ฃŒ๋ฅผ ์ฐธ๊ณ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.


๐Ÿ˜ 2. YARN ์•„ํ‚คํ…์ฒ˜ ์‹ฌํ™”

์œ„์—์„œ๋Š” YARN ์˜ ํ๋ฆ„์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์•˜์Šต๋‹ˆ๋‹ค.

๊ทธ ์ค‘ ์ค‘์š”ํ•œ Resource Manager ์™€, Node Manager ์— ๋Œ€ํ•œ ์ข€ ๋” ์‹ฌํ™”์ ์ธ ๋‚ด์šฉ์„ ๋ช‡ ๊ฐ€์ง€ ๊ณต๋ถ€ํ•˜์—ฌ, ์ •๋ฆฌํ•˜๊ณ  ๊ฐ€๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ˜ 2.1. Resource Manager ์‹ฌํ™”


YARN

์ถœ์ฒ˜ : YARN ์‹ฌํ™” Resource Manager


YARN์˜ ResourceManager๋Š” ํด๋Ÿฌ์Šคํ„ฐ ์ „์ฒด์˜ ๋‘๋‡Œ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ปดํฌ๋„ŒํŠธ๋Š” ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋ชจ๋“  ๋ฆฌ์†Œ์Šค๋ฅผ ์ค‘์•™์—์„œ ํ†ตํ•ฉ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๋ฉฐ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‹คํ–‰๋˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์ž์›์„ ์ ์ ˆํžˆ ๋ถ„๋ฐฐํ•˜๊ณ  ์กฐ์ •ํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ˜ 2.1.1. RM โ†” Client ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š” Component

๐Ÿ”น ClientService
ClientService๋Š” ResourceManager(RM)์™€ ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด์˜ ํ†ต์‹  ์ธํ„ฐํŽ˜์ด์Šค์ž…๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ๊ฐ€ YARN ํด๋Ÿฌ์Šคํ„ฐ์— ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ œ์ถœํ•˜๊ฑฐ๋‚˜, ์ƒํƒœ๋ฅผ ์กฐํšŒํ•˜๊ฑฐ๋‚˜, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ค‘์ง€ํ•˜๋Š” ๋“ฑ์˜ ์š”์ฒญ์„ ๋ณด๋‚ผ ๋•Œ ์ด ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ด๋ฅผ ๋ฐ›์•„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์ด ์ธํ„ฐํŽ˜์ด์Šค๋Š” application submission, termination, queue ์ •๋ณด ์กฐํšŒ, ํด๋Ÿฌ์Šคํ„ฐ ํ†ต๊ณ„ ์กฐํšŒ ๋“ฑ์˜ ๊ธฐ๋Šฅ์„ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ’ก ์˜ˆ์‹œ
์‚ฌ์šฉ์ž๊ฐ€ yarn jar MyApp.jar ๋ช…๋ น์–ด๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ œ์ถœํ•˜๋ฉด, ํ•ด๋‹น ์š”์ฒญ์€ ClientService๋ฅผ ํ†ตํ•ด RM์— ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค.


๐Ÿ”น AdminService
์ผ๋ฐ˜ ์‚ฌ์šฉ์ž์™€ ๊ด€๋ฆฌ์ž์˜ ์š”์ฒญ์„ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•ด ์กด์žฌํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ์ž…๋‹ˆ๋‹ค. AdminService๋ฅผ ํ†ตํ•ด ์˜ค๋Š” ์š”์ฒญ์€ ๋ณดํ†ต ์‹œ์Šคํ…œ ์šด์˜์ž๊ฐ€ ํด๋Ÿฌ์Šคํ„ฐ ๊ตฌ์„ฑ์„ ๋ณ€๊ฒฝํ•  ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์ธ client ์š”์ฒญ๋ณด๋‹ค ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’๊ฒŒ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค.

๐Ÿ’ก ์˜ˆ์‹œ
ํด๋Ÿฌ์Šคํ„ฐ ์šด์˜์ž๊ฐ€ ํŠน์ • ๋…ธ๋“œ๋ฅผ ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์ œ์™ธํ•˜๊ณ  ์‹ถ์„ ๋•Œ, AdminService๋ฅผ ํ†ตํ•ด node list๋ฅผ refreshํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ˜ 2.1.2. RM โ†” NM ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š” Component

๐Ÿ”น ResourceTrackerService
ResourceTrackerService๋Š” ResourceManager์™€ ๊ฐ NodeManager ๊ฐ„์˜ ํ†ต์‹ ์„ ๋‹ด๋‹นํ•˜๋ฉฐ, ๊ฐ ๋…ธ๋“œ์˜ ์ƒํƒœ(์˜ˆ: ๊ฐ€์šฉ ์ž์›, ์‹คํ–‰ ์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ ๋“ฑ)๋ฅผ ์ฃผ๊ธฐ์ ์œผ๋กœ ์ˆ˜์‹ ํ•ฉ๋‹ˆ๋‹ค.

์ด ์ปดํฌ๋„ŒํŠธ๋Š” ๋…ธ๋“œ ๋“ฑ๋ก/์‚ญ์ œ, ์ƒํƒœ ๋ณด๊ณ (heartbeat) ๋“ฑ์„ ์ฒ˜๋ฆฌํ•˜๋ฉฐ, YarnScheduler, NMLivelinessMonitor, NodesListManager์™€ ๋ฐ€์ ‘ํ•˜๊ฒŒ ์—ฐ๋™๋ฉ๋‹ˆ๋‹ค.

๐Ÿ’ก ์˜ˆ์‹œ
์–ด๋–ค NodeManager๊ฐ€ ์ƒˆ๋กœ ์‹œ์ž‘๋˜๋ฉด ์ž์‹ ์„ RM์— ๋“ฑ๋กํ•˜๊ธฐ ์œ„ํ•ด ResourceTrackerService์— RPC๋ฅผ ์ „์†กํ•ฉ๋‹ˆ๋‹ค.



๐Ÿ”น NMLivelinessMonitor
์ด ์ปดํฌ๋„ŒํŠธ๋Š” ๋ชจ๋“  ๋…ธ๋“œ์˜ ์ƒํƒœ๋ฅผ ์ƒ์กด(live) ๋˜๋Š” ์ฃฝ์Œ(dead) ์œผ๋กœ ํŒ๋‹จํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ๋…ธ๋“œ๊ฐ€ ์ผ์ • ์‹œ๊ฐ„(๊ธฐ๋ณธ 10๋ถ„) ์ด์ƒ heartbeat๋ฅผ ๋ณด๋‚ด์ง€ ์•Š์œผ๋ฉด ํ•ด๋‹น ๋…ธ๋“œ๋ฅผ dead ์ƒํƒœ๋กœ ๊ฐ„์ฃผํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ’ก ์˜ˆ์‹œ
ํŠน์ • ๋…ธ๋“œ๊ฐ€ ํ•˜๋“œ์›จ์–ด ๋ฌธ์ œ๋กœ ์ •์ง€๋˜์–ด heartbeat๋ฅผ ๋ณด๋‚ด์ง€ ๋ชปํ•˜๋ฉด, ์ด ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ด๋ฅผ ๊ฐ์ง€ํ•˜๊ณ  RM์€ ํ•ด๋‹น ๋…ธ๋“œ๋ฅผ ์ œ์™ธํ•˜๊ณ  ๋ฆฌ์†Œ์Šค๋ฅผ ์Šค์ผ€์ค„๋งํ•ฉ๋‹ˆ๋‹ค.



๐Ÿ”น NodesListManager
์ด ์ปดํฌ๋„ŒํŠธ๋Š” ํด๋Ÿฌ์Šคํ„ฐ์— ํฌํ•จ๋œ ๋…ธ๋“œ๋“ค์˜ ๋ชฉ๋ก์„ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. host inclusion/exclusion ๋ชฉ๋ก์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์œ ํšจํ•œ ๋…ธ๋“œ๋ฅผ ํŒ๋‹จํ•˜๊ณ , ๊ด€๋ฆฌ์ž๊ฐ€ ์ œ์™ธ์‹œํ‚จ ๋…ธ๋“œ๋„ ์ง€์†์ ์œผ๋กœ ๋ชจ๋‹ˆํ„ฐ๋งํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ’ก ์˜ˆ์‹œ
์šด์˜์ž๊ฐ€ dfs.exclude ํŒŒ์ผ์— ๋…ธ๋“œ A๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด, NodesListManager๋Š” ์ด๋ฅผ ๊ฐ์ง€ํ•˜์—ฌ ํ•ด๋‹น ๋…ธ๋“œ๋ฅผ ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ˜ 2.1.3. RM โ†” AM ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š” Component

๐Ÿ”น ApplicationMasterService
์ด ์„œ๋น„์Šค๋Š” ๋ชจ๋“  AM(ApplicationMaster)์œผ๋กœ๋ถ€ํ„ฐ ์˜ค๋Š” ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‹คํ–‰ ์ค‘์ธ ๋™์•ˆ, ์ปจํ…Œ์ด๋„ˆ ์š”์ฒญ, ํ• ๋‹น ํ•ด์ œ, ๋“ฑ๋ก ๋ฐ ์ข…๋ฃŒ ์š”์ฒญ ๋“ฑ์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ’ก ์˜ˆ์‹œ
ApplicationMaster๊ฐ€ 3๊ฐœ์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์š”์ฒญํ•  ๋•Œ ์ด ์š”์ฒญ์€ ApplicationMasterService๋ฅผ ํ†ตํ•ด RM์— ์ „๋‹ฌ๋˜๊ณ , ์ดํ›„ YarnScheduler๊ฐ€ ํ•ด๋‹น ์š”์ฒญ์„ ๊ฒ€ํ† ํ•ด ์ž์›์„ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค.



๐Ÿ”น AMLivelinessMonitor
AMLivelinessMonitor๋Š” ๊ฐ ApplicationMaster์˜ ์ƒ์กด ์ƒํƒœ๋ฅผ ์ฃผ๊ธฐ์ ์œผ๋กœ ๋ชจ๋‹ˆํ„ฐ๋งํ•ฉ๋‹ˆ๋‹ค. AM์ด heartbeat๋ฅผ ๋ณด๋‚ด์ง€ ์•Š์œผ๋ฉด, RM์€ ํ•ด๋‹น AM์„ ์‹คํŒจ๋กœ ๊ฐ„์ฃผํ•˜๊ณ  ๋ณต๊ตฌ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ’ก ์˜ˆ์‹œ
AM์ด ์˜ค์ž‘๋™ํ•˜๊ฑฐ๋‚˜ JVM ํฌ๋ž˜์‹œ๋กœ ์ธํ•ด ์ฃฝ์œผ๋ฉด, ์ด ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ด๋ฅผ ๊ฐ์ง€ํ•˜๊ณ  RM์€ ์ƒˆ๋กœ์šด AM์„ ์žฌ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ค€๋น„ํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ˜ 2.1.4. RM ํ•ต์‹ฌ: ์Šค์ผ€์ค„๋Ÿฌ์™€ ๋ฆฌ์†Œ์Šค ๊ด€๋ฆฌ์ž

๐Ÿ”น ApplicationsManager
ApplicationsManager๋Š” ํด๋Ÿฌ์Šคํ„ฐ์— ์ œ์ถœ๋œ ๋ชจ๋“  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰ ์ •๋ณด, ์ƒํƒœ ์ถ”์ , ์™„๋ฃŒ๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์บ์‹œ ๋“ฑ์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ’ก ์˜ˆ์‹œ
yarn application -status ๋ช…๋ น์–ด๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒํƒœ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ์ด ์ปดํฌ๋„ŒํŠธ ๋•๋ถ„์ž…๋‹ˆ๋‹ค.



๐Ÿ”น ApplicationACLsManager
Application ๋‹จ์œ„์˜ ์ ‘๊ทผ ์ œ์–ด(Authorization) ๋ฅผ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๋งˆ๋‹ค ์ ‘๊ทผ์ด ํ—ˆ์šฉ๋œ ์‚ฌ์šฉ์ž ๋ชฉ๋ก์„ ACL ํ˜•ํƒœ๋กœ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ’ก ์˜ˆ์‹œ
ํŠน์ • ์‚ฌ์šฉ์ž๊ฐ€ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒํƒœ๋ฅผ ์กฐํšŒํ•˜๋ ค๊ณ  ํ•  ๋•Œ, ์ด ์ปดํฌ๋„ŒํŠธ๊ฐ€ ACL์„ ํ™•์ธํ•˜์—ฌ ์ ‘๊ทผ ๊ถŒํ•œ์ด ์žˆ๋Š”์ง€๋ฅผ ํŒ๋‹จํ•ฉ๋‹ˆ๋‹ค.



๐Ÿ”น ApplicationMasterLauncher
์ƒˆ๋กœ์šด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด RM์— ์ œ์ถœ๋˜๋ฉด, ์ด ์ปดํฌ๋„ŒํŠธ๊ฐ€ ApplicationMaster ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰์‹œํ‚ต๋‹ˆ๋‹ค. ๋‚ด๋ถ€์ ์œผ๋กœ ์Šค๋ ˆ๋“œ ํ’€์„ ์ด์šฉํ•˜์—ฌ ๋น„๋™๊ธฐ์ ์œผ๋กœ ApplicationMaster๋ฅผ ์‹œ์ž‘ํ•˜๊ณ  ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ’ก ์˜ˆ์‹œ
์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ œ์ถœ ํ›„ AM์ด ์‹คํ–‰๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ, ์ด ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ ์ ˆํ•œ NodeManager์— AM ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋ฐฐ์น˜ํ•˜์ง€ ๋ชปํ–ˆ์„ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.



๐Ÿ”น YarnScheduler
YARN์—์„œ ์ž์› ํ• ๋‹น์„ ์‹ค์ œ๋กœ ์ˆ˜ํ–‰ํ•˜๋Š” ํ•ต์‹ฌ ์ปดํฌ๋„ŒํŠธ์ž…๋‹ˆ๋‹ค. ๊ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์š”๊ตฌ์‚ฌํ•ญ์— ๋งž์ถฐ ๋ฉ”๋ชจ๋ฆฌ, CPU, ๋””์Šคํฌ, ๋„คํŠธ์›Œํฌ ๋“ฑ์˜ ์ž์›์„ ์Šค์ผ€์ค„๋งํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ’ก ์˜ˆ์‹œ
ApplicationMaster๊ฐ€ 2GB ๋ฉ”๋ชจ๋ฆฌ์™€ 2 vCore๊ฐ€ ํ•„์š”ํ•œ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์š”์ฒญํ•˜๋ฉด, YarnScheduler๋Š” ํ˜„์žฌ ๊ฐ€์šฉํ•œ ์ž์›์„ ํ™•์ธํ•˜๊ณ  ์ ์ ˆํ•œ NodeManager์— ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค.



๐Ÿ”น ContainerAllocationExpirer
์ด ์ปดํฌ๋„ŒํŠธ๋Š” ํ• ๋‹น๋œ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹ค์ œ๋กœ ์‚ฌ์šฉ๋˜์ง€ ์•Š์œผ๋ฉด ๋งŒ๋ฃŒ(expire) ์‹œํ‚ค๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. AM์ด ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํ• ๋‹น๋ฐ›์•˜์ง€๋งŒ ์‚ฌ์šฉํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ, ํ•ด๋‹น ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํšŒ์ˆ˜ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ’ก ์˜ˆ์‹œ
AM์ด ํ…Œ์ŠคํŠธ ๋ชฉ์ ์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์š”์ฒญํ•œ ํ›„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๊ทธ๋Œ€๋กœ ๋‘๋ฉด, ์ด ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ผ์ • ์‹œ๊ฐ„ ์ดํ›„ ์ด๋ฅผ ํšŒ์ˆ˜ํ•˜์—ฌ ์ž์›์„ ๋‚ญ๋น„ํ•˜์ง€ ์•Š๋„๋ก ํ•ฉ๋‹ˆ๋‹ค


๐Ÿ˜ 2.1.5. TokenSecretManagers ๋ณด์•ˆ ์ปดํฌ๋„ŒํŠธ

YARN์—์„œ๋Š” ๋ชจ๋“  ํ†ต์‹ ์„ ์ธ์ฆ๋œ RPC ๋กœ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด ์—ฌ๋Ÿฌ ์ข…๋ฅ˜์˜ ํ† ํฐ ๊ธฐ๋ฐ˜ ์ธ์ฆ ์‹œ์Šคํ…œ์„ ์ œ๊ณตํ•˜๋ฉฐ, ๊ฐ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ ์ ˆํ•œ ์ธ์ฆ ์ •๋ณด๋ฅผ ํ†ตํ•ด ์„œ๋กœ๋ฅผ ์‹๋ณ„ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ”น ApplicationTokenSecretManager
ApplicationMaster๊ฐ€ RM๊ณผ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ธ์ฆ ํ† ํฐ์„ ๋ฐœ๊ธ‰ํ•˜๊ณ  ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๋ณ„๋กœ ๊ถŒํ•œ์„ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋ฉฐ, ์œ ํšจํ•œ ํ† ํฐ์„ ๊ฐ€์ง„ AM๋งŒ์ด ์š”์ฒญ์„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ’ก ์˜ˆ์‹œ
์•…์˜์ ์ธ ์‚ฌ์šฉ์ž๊ฐ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ† ํฐ ์—†์ด RM์— ์ž์› ์š”์ฒญ์„ ํ•˜๋ฉด, ์ด ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ด๋ฅผ ๊ฑฐ๋ถ€ํ•ฉ๋‹ˆ๋‹ค.



๐Ÿ”น ContainerTokenSecretManager
AM์ด NodeManager์— ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ ์š”์ฒญ์„ ๋ณด๋‚ผ ๋•Œ ํ•„์š”ํ•œ Container Token์„ ๋ฐœ๊ธ‰ํ•˜๊ณ  ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น ํ† ํฐ์„ ํ†ตํ•ด ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ํ•ฉ๋ฒ•์ ์œผ๋กœ ์‹คํ–‰๋˜์—ˆ๋Š”์ง€๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ’ก ์˜ˆ์‹œ
RM์ด AM์—๊ฒŒ ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ ์ •๋ณด๋ฅผ ์ฃผ๋ฉด์„œ ํ•จ๊ป˜ Container Token์„ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. ์ด ํ† ํฐ์ด ์—†๋‹ค๋ฉด NodeManager๋Š” ํ•ด๋‹น ์š”์ฒญ์„ ๊ฑฐ๋ถ€ํ•ฉ๋‹ˆ๋‹ค.



๐Ÿ”น RMDelegationTokenSecretManager
ํด๋ผ์ด์–ธํŠธ๊ฐ€ RM๊ณผ ์ธ์ฆ๋œ ํ†ต์‹ ์„ ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” Delegation Token์„ ์ƒ์„ฑํ•˜๊ณ  ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์ฃผ๋กœ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์žฅ์‹œ๊ฐ„ ์ธ์ฆ ์—†์ด ํ†ต์‹ ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋•์Šต๋‹ˆ๋‹ค.

๐Ÿ’ก ์˜ˆ์‹œ
HDFS์—์„œ long-running job์ด ์‹คํ–‰ ์ค‘์ผ ๋•Œ, ์ค‘๊ฐ„์— ์žฌ์ธ์ฆ ์—†์ด ์ง€์†์ ์œผ๋กœ ๋ฆฌ์†Œ์Šค๋ฅผ ์š”์ฒญํ•˜๋ ค๋ฉด delegation token์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ˜ 2.2. Node Manager ์‹ฌํ™”


YARN

์ถœ์ฒ˜ : YARN ์‹ฌํ™” Node Manager



NodeManager๋Š” YARN ํด๋Ÿฌ์Šคํ„ฐ์˜ ๊ฐ ์›Œ์ปค ๋…ธ๋“œ์—์„œ ์‹คํ–‰๋˜๋Š” ์ปดํฌ๋„ŒํŠธ๋กœ, ์ปจํ…Œ์ด๋„ˆ์˜ ๋ผ์ดํ”„์‚ฌ์ดํด์„ ๊ด€๋ฆฌํ•˜๊ณ , ๋กœ์ปฌ ์ž์›์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๋ฉฐ, ๋ฆฌ์†Œ์Šค ์ƒํƒœ ์ •๋ณด๋ฅผ ResourceManager(RM) ์—๊ฒŒ ์ฃผ๊ธฐ์ ์œผ๋กœ ๋ณด๊ณ ํ•ฉ๋‹ˆ๋‹ค.
( ๋ฆฌ์†Œ์Šค ๋งค๋‹ˆ์ €๋Š” ์ค‘์•™ ์„œ๋ฒ„ 1๊ณณ์—์„œ๋งŒ ์‹คํ–‰๋˜์ง€๋งŒ, ๋…ธ๋“œ ๋งค๋‹ˆ์ €๋Š” ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด ๋ชจ๋“  ์›Œ์ปค ๋…ธ๋“œ์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. )

NodeManager๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ•ต์‹ฌ ๊ตฌ์„ฑ ์š”์†Œ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.


๐Ÿ˜ 2.2.1 NodeStatusUpdater

NodeStatusUpdater๋Š” NodeManager๊ฐ€ ์‹œ์ž‘๋  ๋•Œ ResourceManager์— ์ž์‹ ์„ ๋“ฑ๋กํ•˜๊ณ , ํ•ด๋‹น ๋…ธ๋“œ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ฆฌ์†Œ์Šค ์ •๋ณด๋ฅผ ์ „๋‹ฌํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ์ž…๋‹ˆ๋‹ค. ์ดํ›„ ์ฃผ๊ธฐ์ ์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ ์ƒํƒœ, ์ž์› ์‚ฌ์šฉ ํ˜„ํ™ฉ, ๋…ธ๋“œ ์ƒํƒœ ๋“ฑ์„ RM์— ์ „์†กํ•ฉ๋‹ˆ๋‹ค.

RM์€ NodeStatusUpdater๋ฅผ ํ†ตํ•ด ์ปจํ…Œ์ด๋„ˆ ์ข…๋ฃŒ ๋ช…๋ น ๋“ฑ์„ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ’ก ์˜ˆ์‹œ
NodeManager๊ฐ€ โ€œ์„œ๋ฒ„-01โ€์—์„œ ์‹œ์ž‘๋˜๋ฉด, NodeStatusUpdater๊ฐ€ ์„œ๋ฒ„์˜ ๋ฉ”๋ชจ๋ฆฌ 32GB, CPU 16์ฝ”์–ด ๋“ฑ์˜ ์ •๋ณด๋ฅผ RM์— ์ „์†กํ•˜๊ณ , ์ดํ›„ ํ•ด๋‹น ๋…ธ๋“œ์˜ ์ปจํ…Œ์ด๋„ˆ ์ƒํƒœ๋ฅผ ์ฃผ๊ธฐ์ ์œผ๋กœ ๋ณด๊ณ ํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ˜ 2.2.2 ContainerManager

ContainerManager๋Š” NodeManager์˜ ํ•ต์‹ฌ ์ปดํฌ๋„ŒํŠธ๋กœ, ์ปจํ…Œ์ด๋„ˆ์˜ ์ƒ์„ฑ, ์‹คํ–‰, ๋ชจ๋‹ˆํ„ฐ๋ง, ์ข…๋ฃŒ๋ฅผ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์˜ ํ•˜์œ„ ๊ตฌ์„ฑ ์š”์†Œ๋“ค๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค:

๐Ÿ”นRPC Server
ApplicationMaster(AM)์˜ ์š”์ฒญ์„ ์ˆ˜์‹ ํ•˜์—ฌ ์ƒˆ๋กœ์šด ์ปจํ…Œ์ด๋„ˆ์˜ ์‹คํ–‰์„ ์‹œ์ž‘ํ•˜๊ฑฐ๋‚˜ ์ค‘์ง€ํ•˜๋Š” ์„œ๋ฒ„์ž…๋‹ˆ๋‹ค. ์š”์ฒญ์€ ์ธ์ฆ ์ ˆ์ฐจ๋ฅผ ๊ฑฐ์น˜๋ฉฐ, ๋กœ๊ทธ๋Š” ๊ฐ์‚ฌ์šฉ์œผ๋กœ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.

๐Ÿ’ก ์˜ˆ์‹œ
AM์ด job-1234๋ฅผ ์œ„ํ•ด ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ ์š”์ฒญ์„ ๋ณด๋‚ด๋ฉด, RPC Server๊ฐ€ ์ด๋ฅผ ์ˆ˜๋ฝํ•˜๊ณ  ํ•ด๋‹น ์ž‘์—…์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ”นResourceLocalizationService
์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰์— ํ•„์š”ํ•œ ํŒŒ์ผ์ด๋‚˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜๊ณ , ๋””์Šคํฌ์— ๋ฐฐํฌํ•˜์—ฌ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋ฆฌ์†Œ์Šค๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.

์ ‘๊ทผ ๊ถŒํ•œ ๋ฐ ์‚ฌ์šฉ ์ œํ•œ ์ •์ฑ…๋„ ํ•จ๊ป˜ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

๐Ÿ’ก ์˜ˆ์‹œ
Spark ์‹คํ–‰ ์‹œ ํ•„์š”ํ•œ JAR ํŒŒ์ผ๋“ค์„ ๋ฏธ๋ฆฌ ๋‹ค์šด๋ฐ›์•„ ์ปจํ…Œ์ด๋„ˆ ๋””๋ ‰ํ† ๋ฆฌ์— ๋ฐฐ์น˜ํ•˜๊ณ , ํ•ด๋‹น ์ปจํ…Œ์ด๋„ˆ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋„๋ก ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ”นContainersLauncher
์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰์„ ์œ„ํ•œ ์Šค๋ ˆ๋“œ ํ’€์„ ๊ด€๋ฆฌํ•˜๋ฉฐ, ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹ ์†ํ•˜๊ฒŒ ์‹œ์ž‘ํ•˜๊ณ , ์ข…๋ฃŒ ์š”์ฒญ ์‹œ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ’ก ์˜ˆ์‹œ
RM์ด job-5678์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ข…๋ฃŒํ•˜๋ผ๊ณ  ๋ช…๋ นํ•˜๋ฉด, ContainersLauncher๋Š” ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค๋ฅผ ์ฐพ์•„ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ”นAuxServices (๋ณด์กฐ ์„œ๋น„์Šค)
ํŠน์ • ํ”„๋ ˆ์ž„์›Œํฌ(Hive, Spark ๋“ฑ)์—์„œ ์š”๊ตฌํ•˜๋Š” ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์„ ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ฐฉ์‹์œผ๋กœ ์ง€์›ํ•˜๋Š” ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค. NodeManager ์‹œ์ž‘ ์ „์— ์„ค์ •ํ•ด์•ผ ํ•˜๋ฉฐ, ๊ฐ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์˜ ์ปจํ…Œ์ด๋„ˆ ์‹œ์ž‘/์ข…๋ฃŒ ์‹œ ์•Œ๋ฆผ์„ ๋ฐ›์Šต๋‹ˆ๋‹ค.

๐Ÿ’ก ์˜ˆ์‹œ
ShuffleHandler๋Š” MapReduce์˜ Reduce ์ž‘์—…์„ ์œ„ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๋ณด์กฐ ์„œ๋น„์Šค๋กœ, AM๊ณผ ์—ฐ๋™ํ•˜์—ฌ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ”นContainersMonitor
์‹คํ–‰ ์ค‘์ธ ๊ฐ ์ปจํ…Œ์ด๋„ˆ์˜ ๋ฉ”๋ชจ๋ฆฌ, CPU ๋“ฑ์˜ ์ž์› ์‚ฌ์šฉ๋Ÿ‰์„ ์ง€์†์ ์œผ๋กœ ๋ชจ๋‹ˆํ„ฐ๋งํ•ฉ๋‹ˆ๋‹ค. ์ง€์ •๋œ ํ• ๋‹น๋Ÿ‰์„ ์ดˆ๊ณผํ•  ๊ฒฝ์šฐ ํ•ด๋‹น ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ’ก ์˜ˆ์‹œ
Container-XYZ๊ฐ€ 4GB ํ• ๋‹น์„ ๋ฐ›์•˜์ง€๋งŒ, 6GB๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ContainersMonitor๋Š” RM์˜ ์ •์ฑ…์— ๋”ฐ๋ผ ํ•ด๋‹น ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ”นLogHandler
์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ ์ค‘ ์ƒ์„ฑ๋˜๋Š” ๋กœ๊ทธ๋ฅผ ๋กœ์ปฌ ๋””์Šคํฌ์— ์ €์žฅํ•˜๊ฑฐ๋‚˜ ์••์ถ•ํ•˜์—ฌ ์—…๋กœ๋“œํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋กœ๊ทธ ํ•ธ๋“ค๋ง์€ ํ”Œ๋Ÿฌ๊ทธ์ธ ๊ตฌ์กฐ๋กœ ๋˜์–ด ์žˆ์–ด ๊ต์ฒด๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ’ก ์˜ˆ์‹œ
์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ถœ๋ ฅํ•œ stdout/stderr ๋กœ๊ทธ๋ฅผ /logs/job123/container456.log ๊ฒฝ๋กœ์— ์ €์žฅํ•˜๊ฑฐ๋‚˜, HDFS์— ์—…๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๐Ÿ˜ 2.2.3 ContainerExecutor

ContainerExecutor๋Š” OS์™€ ์ง์ ‘ ์ƒํ˜ธ ์ž‘์šฉํ•˜์—ฌ, ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰์„ ์œ„ํ•œ ๋””๋ ‰ํ† ๋ฆฌ/ํŒŒ์ผ ๋ฐฐ์น˜, ๋ณด์•ˆ ๋ฐฉ์‹์œผ๋กœ ํ”„๋กœ์„ธ์Šค ์‹œ์ž‘/์ข…๋ฃŒ, ์‹คํ–‰ ํ›„ ์ •๋ฆฌ(clean-up) ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
์ปจํ…Œ์ด๋„ˆ์˜ ๊ฒฉ๋ฆฌ๋ฅผ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด user-per-container ์‹คํ–‰ ๋ชจ๋ธ์ด๋‚˜ Docker ๋“ฑ๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉ๋˜๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ˜ 2.2.4 NodeHealthCheckerService

์ด ์„œ๋น„์Šค๋Š” ๋…ธ๋“œ ์ƒํƒœ๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ฃผ๊ธฐ์ ์œผ๋กœ ์‹คํ–‰ํ•˜๋ฉฐ, ๋””์Šคํฌ์˜ ์ƒํƒœ๋ฅผ ์ ๊ฒ€ํ•˜๊ธฐ ์œ„ํ•ด ์ž„์‹œ ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ณ  ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.

์ƒํƒœ ๋ณ€ํ™”๊ฐ€ ๊ฐ์ง€๋˜๋ฉด NodeStatusUpdater๋ฅผ ํ†ตํ•ด RM์— ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค.

๐Ÿ’ก ์˜ˆ์‹œ
/tmp ๋””๋ ‰ํ† ๋ฆฌ์— ํŒŒ์ผ์„ ์ƒ์„ฑํ•ด๋ณด๊ณ , ์ƒ์„ฑ/์‚ญ์ œ ์†๋„๋ฅผ ํ†ตํ•ด ๋””์Šคํฌ ์ƒํƒœ๋ฅผ ํŒ๋‹จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋””์Šคํฌ I/O ์ง€์—ฐ์ด ํฌ๋ฉด ๋…ธ๋“œ๋ฅผ โ€œ๋น„์ •์ƒ ์ƒํƒœโ€๋กœ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ˜ 2.2.5 Security: ContainerTokenSecretManager

์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ ์š”์ฒญ์ด ์ •์ƒ์ ์ธ ResourceManager๋กœ๋ถ€ํ„ฐ ์˜จ ๊ฒƒ์ธ์ง€ ํ™•์ธํ•˜๋Š” ๋ณด์•ˆ ์ปดํฌ๋„ŒํŠธ์ž…๋‹ˆ๋‹ค.
Token ๊ธฐ๋ฐ˜ ์ธ์ฆ์„ ํ†ตํ•ด ์œ„์กฐ๋œ ์‹คํ–‰ ์š”์ฒญ์„ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ’ก ์˜ˆ์‹œ
์•…์˜์ ์ธ ์‚ฌ์šฉ์ž๊ฐ€ RM์„ ํ†ตํ•˜์ง€ ์•Š๊ณ  ์ง์ ‘ NodeManager์— ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ ์š”์ฒญ์„ ๋ณด๋‚ด๋”๋ผ๋„, ์œ ํšจํ•œ ํ† ํฐ์ด ์—†์œผ๋ฉด ์‹คํ–‰์ด ๊ฑฐ๋ถ€๋ฉ๋‹ˆ๋‹ค.




โ—ˆ


๐Ÿ˜ 3. YARN scheduler ์™€ Queue

YARN

์ถœ์ฒ˜ : YARN Scheduler



์œ„์—์„œ๋Š” ์• ๋งคํ•ด์„œ ํ•œ ๋ฒˆ์— ์ •๋ฆฌํ•˜์ง€ ๋ชปํ•˜๊ณ , YARN Scheduler ๋Š” ์ด๋ ‡๊ฒŒ ๋”ฐ๋กœ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

YARN Scheduler๋Š” ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋ฆฌ์†Œ์Šค๋ฅผ ์–ด๋–ป๊ฒŒ, ์–ผ๋งˆ๋‚˜ ํ• ๋‹นํ• ์ง€๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๋ฆฌ์†Œ์Šค ํ• ๋‹น ์•Œ๊ณ ๋ฆฌ์ฆ˜์ž…๋‹ˆ๋‹ค. ๋‹ค์–‘ํ•œ ์„ค์ • ๊ฐ’์„ ํ†ตํ•ด ํด๋Ÿฌ์Šคํ„ฐ ์ž์›์„ ํšจ์œจ์ ์œผ๋กœ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

YARN์€ ๊ธฐ๋ณธ์ ์œผ๋กœ Hadoop ํ”Œ๋žซํผ์—์„œ ์‹คํ–‰๋˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋ฆฌ์†Œ์Šค๋ฅผ ํ• ๋‹นํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ์—ญํ• ์„ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ œ์ถœ๋˜๋ฉด ๋จผ์ € Application Master(AM) ์ด ์ƒ์„ฑ๋˜๊ณ , ์ดํ›„ ์•„๋ž˜์™€ ๊ฐ™์€ ์ ˆ์ฐจ๊ฐ€ ์ง„ํ–‰๋ฉ๋‹ˆ๋‹ค.

์ด ๊ณผ์ •์—์„œ AM์€ ResourceManager(RM) ์—๊ฒŒ ํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ์š”์ฒญํ•˜๋ฉฐ, RM์€ Scheduler๋ฅผ ํ†ตํ•ด ์ ์ ˆํ•œ ์–‘์˜ ๋ฆฌ์†Œ์Šค๋ฅผ ์–ด๋–ค ๋…ธ๋“œ์— ํ• ๋‹นํ• ์ง€ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.

Scheduler์˜ ์ข…๋ฅ˜๋กœ๋Š” ์•„๋ž˜ 3๊ฐ€์ง€๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ์ด ์ค‘ Capacity scheduler๊ฐ€ ๊ธฐ๋ณธ default ๊ฐ’์œผ๋กœ ์„ค์ •๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ˜ 3.1. FIFO scheduler


YARN

์ถœ์ฒ˜ : YARN FIFO scheduler



FIFO ์Šค์ผ€์ค„๋Ÿฌ๋Š” ์ž‘์—…์ด ํด๋Ÿฌ์Šคํ„ฐ์— ์ œ์ถœ๋œ ์ˆœ์„œ๋Œ€๋กœ ๋ฆฌ์†Œ์Šค๋ฅผ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ๊ฐ€์žฅ ๋จผ์ € ์ œ์ถœ๋œ ์ž‘์—…์ด ๊ฐ€์žฅ ๋จผ์ € ์‹คํ–‰๋˜๊ณ , ๊ทธ ์ž‘์—…์ด ์™„๋ฃŒ๋˜๊ธฐ ์ „๊นŒ์ง€๋Š” ๋’ค์— ๋Œ€๊ธฐ ์ค‘์ธ ์ž‘์—…๋“ค์€ ์‹คํ–‰๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋™์ž‘ ๋ฐฉ์‹์€ ๋งค์šฐ ๋‹จ์ˆœํ•ฉ๋‹ˆ๋‹ค. ๋ฆฌ์†Œ์Šค ๋งค๋‹ˆ์ €(ResourceManager)๋Š” ์ž‘์—…์ด ๋“ค์–ด์˜จ ์ˆœ์„œ๋Œ€๋กœ ์ž‘์—… ํ์— ์Œ“๊ณ , ์ž์›์ด ์ถฉ๋ถ„ํ•  ๋•Œ๋งˆ๋‹ค ํ์—์„œ ๊ฐ€์žฅ ์•ž์— ์žˆ๋Š” ์ž‘์—…์— ๋ฆฌ์†Œ์Šค๋ฅผ ํ• ๋‹นํ•ด ์‹คํ–‰์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, A ์ž‘์—…์ด ๋จผ์ € ์ œ์ถœ๋˜์–ด ํด๋Ÿฌ์Šคํ„ฐ์˜ ์ž์›์„ ๋ชจ๋‘ ์‚ฌ์šฉ ์ค‘์ด๋ผ๋ฉด, ๊ทธ ์ž‘์—…์ด ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ B ์ž‘์—…์€ ๋Œ€๊ธฐ ์ƒํƒœ์— ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ๋˜๋ฉด ์ž‘์—… ์šฐ์„ ์ˆœ์œ„ ์กฐ์ •์ด ์—†๊ณ , ๊ธด ์ž‘์—…์ด ์•ž์— ์žˆ์„ ๊ฒฝ์šฐ ๋’ค์— ์žˆ๋Š” ์งง์€ ์ž‘์—…์ด ๊ธด ์‹œ๊ฐ„ ๊ธฐ๋‹ค๋ ค์•ผ ํ•˜๋Š” ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ˜ 3.2. Fair scheduler


YARN

์ถœ์ฒ˜ : YARN Fair Scheduler



Fair Scheduler๋Š” ์—ฌ๋Ÿฌ ์‚ฌ์šฉ์ž์™€ ์ž‘์—…๋“ค์ด ํด๋Ÿฌ์Šคํ„ฐ ์ž์›์„ ๊ณต์ •ํ•˜๊ฒŒ ๋‚˜๋ˆ„์–ด ์“ฐ๋„๋ก ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

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

์˜ˆ๋ฅผ ๋“ค์–ด, Pool A์™€ Pool B๊ฐ€ ๊ฐ๊ฐ 30%, 70%์˜ ์ตœ์†Œ ์ž์›์„ ๋ณด์žฅ๋ฐ›๊ณ  ์žˆ๋Š”๋ฐ, Pool B๊ฐ€ ํ˜„์žฌ 50%๋งŒ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค๋ฉด Pool A๊ฐ€ ์ตœ๋Œ€ 50%๊นŒ์ง€ ํ™•์žฅํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Fair Scheduler๋Š” ์ฃผ๊ธฐ์ ์œผ๋กœ ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด ์ž‘์—…๋“ค์˜ ์ž์› ์‚ฌ์šฉ๋Ÿ‰์„ ์ฒดํฌํ•˜๋ฉฐ, ์ž์› ๋ฐฐ๋ถ„์„ ์กฐ์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์—์„œ ์ž์›์„ ๋งŽ์ด ์“ด ์ž‘์—…์€ ์ž ์‹œ ๋Œ€๊ธฐ์‹œํ‚ค๊ณ , ์ ๊ฒŒ ์“ด ์ž‘์—…์— ๋” ๋งŽ์€ ์ž์›์„ ๋ฐฐ๋ถ„ํ•ด ์ „์ฒด ์‚ฌ์šฉ์ž์˜ ๊ณต์ •์„ฑ์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.

์ด ์Šค์ผ€์ค„๋Ÿฌ๋Š” ์ž‘์—…์ด ๋๋‚˜์ง€ ์•Š์•„๋„ ์ž์›์„ ๋‹ค์‹œ ์žฌ๋ถ„๋ฐฐํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ๊ธด ์ž‘์—…๊ณผ ์งง์€ ์ž‘์—…์ด ํ˜ผ์žฌ๋œ ํ™˜๊ฒฝ์—์„œ ํšจ์œจ์ ์ธ ์ž์› ํ™œ์šฉ๊ณผ ์ž‘์—… ๊ณต์ •์„ฑ์„ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ˜ 3.3. Capacity scheduler


YARN

์ถœ์ฒ˜ : YARN Capacity Scheduler



Capacity Scheduler๋Š” YARN์˜ ๋Œ€ํ‘œ์ ์ธ ์Šค์ผ€์ค„๋ง ์ •์ฑ… ์ค‘ ํ•˜๋‚˜๋กœ, ํ•˜๋‚˜์˜ ํด๋Ÿฌ์Šคํ„ฐ ์ž์›์„ ์—ฌ๋Ÿฌ ์‚ฌ์šฉ์ž๋‚˜ ํŒ€์ด ๊ณต์ •ํ•˜๊ณ  ํšจ์œจ์ ์œผ๋กœ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ์Šค์ผ€์ค„๋Ÿฌ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ Queue(ํ) ๋‹จ์œ„๋ฅผ ํ†ตํ•ด ํด๋Ÿฌ์Šคํ„ฐ ์ž์›์„ ๋ถ„๋ฐฐํ•˜๋ฉฐ, ๊ฐ Queue๋งˆ๋‹ค ์ตœ์†Œ ๋ฐ ์ตœ๋Œ€ ๋ฆฌ์†Œ์Šค ๋น„์œจ์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Capacity Scheduler๋Š” root ํ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ณ„์ธต์  ๊ตฌ์กฐ์˜ Queue๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ฐ Queue๋Š” ๋ถ€๋ชจ Queue๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ตœ์†Œ(min)์™€ ์ตœ๋Œ€(max) ์šฉ๋Ÿ‰(capacity)์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Leaf Queue๋“ค(๊ฐ€์žฅ ํ•˜์œ„ ํ)์€ ํ•ฉ์ณ์„œ 100%์˜ min capacity๋ฅผ ๊ฐ–๋„๋ก ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ, Capacity Scheduler๋Š” Queue ๊ฐ„์˜ ๋ฆฌ์†Œ์Šค ์œ ์—ฐ์„ฑ(Elasticity)์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, A ํ์˜ ์„ค์ • ์šฉ๋Ÿ‰์ด 20%, B ํ๊ฐ€ 80%์ธ ๊ฒฝ์šฐ, B ํ์˜ ๋ฆฌ์†Œ์Šค๊ฐ€ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค๋ฉด A ํ๊ฐ€ ์ผ์‹œ์ ์œผ๋กœ ์ „์ฒด ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ๋ฆฌ์†Œ์Šค ํ™œ์šฉ๋ฅ ์„ ๊ทน๋Œ€ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

โœ… ์ฃผ์š” ์„ค์ • ์˜ต์…˜

Property ์„ค๋ช…
yarn.scheduler.capacity.root.queues root Queue ํ•˜์œ„์— ์ƒ์„ฑํ•  Queue ๋ชฉ๋ก
yarn.scheduler.capacity.root.{Queue ์ด๋ฆ„}.queues ํŠน์ • Queue์˜ ํ•˜์œ„ Queue ๋ชฉ๋ก
yarn.scheduler.capacity.root.{Queue ์ด๋ฆ„}.capacity ํ•ด๋‹น Queue์˜ ์ตœ์†Œ(min) ๋ฆฌ์†Œ์Šค ๋น„์œจ
yarn.scheduler.capacity.root.{Queue ์ด๋ฆ„}.maximum-capacity ํ•ด๋‹น Queue์˜ ์ตœ๋Œ€(max) ๋ฆฌ์†Œ์Šค ๋น„์œจ


โœ… Minimum User Percentage & User Limit Factor

  • ํ•˜๋‚˜์˜ Queue ๋‚ด์—์„œ ๋‹ค์ˆ˜ ์‚ฌ์šฉ์ž์˜ ๋ฆฌ์†Œ์Šค ํ• ๋‹น ์ œ์–ด๋ฅผ ์œ„ํ•œ ์„ค์ •์ž…๋‹ˆ๋‹ค.

minimum-user-limit-percent : ์—ฌ๋Ÿฌ ์‚ฌ์šฉ์ž๊ฐ€ ๋™์‹œ์— ์ ‘๊ทผ ์‹œ ๊ฐ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ตœ์†Œ ๋ณด์žฅ๋˜๋Š” ๋ฆฌ์†Œ์Šค ๋น„์œจ์ž…๋‹ˆ๋‹ค. ์˜ˆ์‹œ๋กœ 10%๋กœ ์„ค์ • ์‹œ, 10๋ช…์˜ ์‚ฌ์šฉ์ž๊ฐ€ ์žˆ์„ ๋•Œ ๊ฐ์ž๋Š” ์ตœ์†Œ 10%๋ฅผ ๋ณด์žฅ๋ฐ›์Šต๋‹ˆ๋‹ค.

user-limit-factor : ํ•œ ์‚ฌ์šฉ์ž๊ฐ€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ๋ฆฌ์†Œ์Šค์˜ ๋ฐฐ์ˆ˜์ž…๋‹ˆ๋‹ค. ๊ณ„์‚ฐ์‹์€ ์ตœ๋Œ€ ์‚ฌ์šฉ๋Ÿ‰ = min capacity ร— user-limit-factor ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ๋“ค๋ฉด, min capacity๊ฐ€ 10%, user-limit-factor๊ฐ€ 3์ด๋ฉด ํ•œ ์‚ฌ์šฉ์ž๊ฐ€ ์ตœ๋Œ€ 30%๊นŒ์ง€ ์‚ฌ์šฉ ๊ฐ€๋Šฅ.


โœ… ๊ด€๋ จ ์„ค์ • ์˜ต์…˜

Property ์„ค๋ช…
yarn.scheduler.capacity.root.{Queue ์ด๋ฆ„}.user-limit-factor ํ•ด๋‹น Queue์˜ ์‚ฌ์šฉ์ž ์ตœ๋Œ€ ์‚ฌ์šฉ ๋ฐฐ์ˆ˜
yarn.scheduler.capacity.root.{Queue ์ด๋ฆ„}.minimum-user-limit-percent ํ•ด๋‹น Queue์—์„œ ์‚ฌ์šฉ์ž๋‹น ์ตœ์†Œ ๋ณด์žฅ ๋น„์œจ


โœ… ๊ธฐํƒ€ ์˜ต์…˜

Property ์„ค๋ช…
yarn.scheduler.capacity.maximum-am-resource-percent ์ „์ฒด ํด๋Ÿฌ์Šคํ„ฐ์—์„œ AM์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ๋ฆฌ์†Œ์Šค ๋น„์œจ
yarn.scheduler.capacity.{Queue ์ด๋ฆ„}.maximum-am-resource-percent ํŠน์ • Queue์—์„œ AM์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ๋ฆฌ์†Œ์Šค ๋น„์œจ


๐Ÿ’ก ์ฐธ๊ณ : AM(Application Master)์— ํ• ๋‹น๋˜๋Š” ๋ฆฌ์†Œ์Šค๊ฐ€ ๋งŽ์„์ˆ˜๋ก, ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ์— ํ• ๋‹น๋˜๋Š” ๋ฆฌ์†Œ์Šค๋Š” ์ค„์–ด๋“ญ๋‹ˆ๋‹ค.


์‚ฌ์šฉ์ž ๋˜๋Š” ๊ทธ๋ฃน๋ณ„ Queue ๋งคํ•‘

  • ์‚ฌ์šฉ์ž๋‚˜ ๊ทธ๋ฃน์„ ํŠน์ • Queue์— 1:1๋กœ ๋งคํ•‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋งคํ•‘์ด ๋งŽ์œผ๋ฉด ์ž๋™ ๋งคํ•‘ ๊ทœ์น™์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์„ค์ • ๋ฐฉ์‹ ์˜ˆ์‹œ ์„ค๋ช…
์‚ฌ์šฉ์ž 1:1 ๋งคํ•‘ u:alice:analytics alice ์‚ฌ์šฉ์ž๋ฅผ analytics Queue์— ๋งคํ•‘
๊ทธ๋ฃน ๋งคํ•‘ g:dev:devqueue dev ๊ทธ๋ฃน์„ devqueue์— ๋งคํ•‘
์ž๋™ ๋งคํ•‘ (์‚ฌ์šฉ์ž) u:%user.%user ์‚ฌ์šฉ์ž ์ด๋ฆ„๊ณผ ๋™์ผํ•œ ์ด๋ฆ„์˜ Queue์— ์ž๋™ ๋งคํ•‘
์ž๋™ ๋งคํ•‘ (๊ทธ๋ฃน) g:%user.%primary_group ์‚ฌ์šฉ์ž ๊ธฐ๋ณธ ๊ทธ๋ฃน ์ด๋ฆ„๊ณผ ๋™์ผํ•œ Queue์— ์ž๋™ ๋งคํ•‘

์„ค์ • ์œ„์น˜: yarn.scheduler.capacity.queue-mappings


์ปดํฌ๋„ŒํŠธ(์—”์ง„)๋ณ„ Queue ์ง€์ • ๋ฐฉ๋ฒ•

์ปดํฌ๋„ŒํŠธ ์„ค์ • ๋ฐฉ๋ฒ•
MapReduce ์‹คํ–‰ ์‹œ -D mapreduce.job.queuename={Queue ์ด๋ฆ„} ์˜ต์…˜ ์‚ฌ์šฉ
Spark spark-submit ์‹œ --queue {Queue ์ด๋ฆ„} ์˜ต์…˜ ์‚ฌ์šฉ
Hive ์ฟผ๋ฆฌ ๋‚ด์—์„œ set {์—”์ง„์ด๋ฆ„}.queue.name={Queue ์ด๋ฆ„} ๋ช…๋ น์–ด ์‚ฌ์šฉ

Hive๋Š” Tez, MR ๋“ฑ ์—ฌ๋Ÿฌ ์—”์ง„์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ์‚ฌ์šฉํ•˜๋Š” ์—”์ง„ ์ด๋ฆ„์„ ์ •ํ™•ํžˆ ๋ช…์‹œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.




โ—ˆ


๐Ÿ˜ 4. YARN TimeLine Service


YARN Timeline Service๋Š” YARN ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์‹คํ–‰๋˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๋“ค์˜ ์ƒํƒœ, ์ด๋ฒคํŠธ, ๊ทธ๋ฆฌ๊ณ  ๋‹ค์–‘ํ•œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•˜๊ณ  ์ €์žฅํ•˜๋Š” ํ•ต์‹ฌ ์ปดํฌ๋„ŒํŠธ์ž…๋‹ˆ๋‹ค. ๋‹จ์ˆœํ•œ ์‹คํ–‰ ์ƒํƒœ๋ฟ ์•„๋‹ˆ๋ผ, ๊ฐ ํƒœ์Šคํฌ(Task)์˜ ์ƒ์„ธ ์‹คํ–‰ ๋‚ด์—ญ, ์˜ค๋ฅ˜ ๋ฐœ์ƒ ๊ธฐ๋ก, ์ž์› ์‚ฌ์šฉ ํ†ต๊ณ„ ๋“ฑ ์ •๋ฐ€ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ค‘์•™ ์ €์žฅ์†Œ์— ๊ธฐ๋กํ•จ์œผ๋กœ์จ, ์šด์˜์ž๋‚˜ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ฌธ์ œ๋ฅผ ์‰ฝ๊ฒŒ ๋ถ„์„ํ•˜๊ณ  ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋•์Šต๋‹ˆ๋‹ค.

YARN ํ™˜๊ฒฝ์—์„œ ์ˆ˜์‹ญ~์ˆ˜์ฒœ ๊ฐœ์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋™์‹œ์— ์‹คํ–‰๋˜๊ณ , ๊ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์ˆ˜๋ฐฑ ๊ฐœ์˜ ์ปจํ…Œ์ด๋„ˆ์™€ ํƒœ์Šคํฌ๋ฅผ ํฌํ•จํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฐ ์ƒํ™ฉ์—์„œ ๋‹จ์ˆœํžˆ ResourceManager์˜ UI๋งŒ์œผ๋กœ๋Š” ์‹คํ–‰ ๋‚ด์—ญ์„ ํŒŒ์•…ํ•˜๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ์–ด๋–ค MapReduce ์ž‘์—…์ด ์‹คํŒจํ–ˆ๋Š”์ง€, Spark ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์–ด๋А ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ž์› ๋ถ€์กฑ์œผ๋กœ ์ข…๋ฃŒ๋˜์—ˆ๋Š”์ง€, ๋˜๋Š” ํƒœ์Šคํฌ ์ˆ˜ํ–‰ ์‹œ๊ฐ„์ด ํ‰๊ท ๋ณด๋‹ค ๋น„์ •์ƒ์ ์œผ๋กœ ๊ธธ์–ด์ง„ ๊ฒฝ์šฐ๊ฐ€ ์–ด๋””์ธ์ง€ ๋“ฑ์„ ํŒŒ์•…ํ•ด์•ผ ํ•  ๋•Œ, Timeline Service๋Š” ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค.

ARN Timeline Service๋Š” ์ด๋Ÿฌํ•œ ์š”๊ตฌ๋ฅผ ์ถฉ์กฑ์‹œํ‚ค๊ธฐ ์œ„ํ•ด ์„ค๊ณ„๋œ ์ปดํฌ๋„ŒํŠธ๋กœ, ์ฒ˜์Œ์—๋Š” v1 ๋ฒ„์ „์œผ๋กœ ๋‹จ์ˆœํ•œ ๋‹จ์ผ ์„œ๋ฒ„ ๊ตฌ์กฐ์—์„œ ์‹œ์ž‘๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Timeline Service v1์€ ๋ชจ๋“  ์ด๋ฒคํŠธ ๋ฐ์ดํ„ฐ๋ฅผ JSON ํ˜•ํƒœ๋กœ ์ˆ˜์ง‘ํ•œ ๋’ค, HDFS์— ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ตฌ์กฐ๊ฐ€ ๋‹จ์ˆœํ•˜๊ณ  ์„ค์ •์ด ๋น„๊ต์  ์‰ฌ์› ๊ธฐ ๋•Œ๋ฌธ์— ์†Œ๊ทœ๋ชจ ๋˜๋Š” ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์—์„œ๋Š” ์ ํ•ฉํ–ˆ์ง€๋งŒ, ๋Œ€๊ทœ๋ชจ ํด๋Ÿฌ์Šคํ„ฐ์—์„œ๋Š” ์—ฌ๋Ÿฌ ํ•œ๊ณ„๊ฐ€ ๋“œ๋Ÿฌ๋‚ฌ์Šต๋‹ˆ๋‹ค.

๊ฐ€์žฅ ํฐ ๋ฌธ์ œ๋Š” ํ™•์žฅ์„ฑ ๋ถ€์กฑ๊ณผ ๋ณ‘๋ชฉํ˜„์ƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค.
์ฝ๊ธฐ์™€ ์“ฐ๊ธฐ ์š”์ฒญ์ด ๋ชจ๋‘ ํ•˜๋‚˜์˜ ์„œ๋ฒ„ ์ธ์Šคํ„ด์Šค๋กœ ์ง‘์ค‘๋˜๋‹ค ๋ณด๋‹ˆ, ์ž‘์—…์ด ๋ชฐ๋ฆด ๊ฒฝ์šฐ ์ด๋ฒคํŠธ ์œ ์‹ค, ์‘๋‹ต ์ง€์—ฐ, ์‹œ์Šคํ…œ ๊ณผ๋ถ€ํ•˜ ๋“ฑ์˜ ๋ฌธ์ œ๊ฐ€ ๋นˆ๋ฒˆํ•˜๊ฒŒ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ UI๋‚˜ REST API๋ฅผ ํ†ตํ•ด ์ด๋ฒคํŠธ๋ฅผ ์กฐํšŒํ•  ๋•Œ๋„ ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ์žฆ์•˜์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ํ•œ๊ณ„๋ฅผ ๊ทน๋ณตํ•˜๊ธฐ ์œ„ํ•ด Hadoop 3.0๋ถ€ํ„ฐ Timeline Service v2 (TSv2)๊ฐ€ ๋„์ž…๋˜์—ˆ์Šต๋‹ˆ๋‹ค. TSv2๋Š” ๋‹จ์ˆœํ•œ ๋ฆฌํŒฉํ† ๋ง ์ˆ˜์ค€์ด ์•„๋‹ˆ๋ผ, ์•„ํ‚คํ…์ฒ˜ ์ „๋ฐ˜์„ ์ˆ˜ํ‰ ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ๋ถ„์‚ฐ ๊ตฌ์กฐ๋กœ ์žฌ์„ค๊ณ„ํ•œ ๊ฒƒ์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.



yarn_timeline

์ถœ์ฒ˜ : Yarn TimeLine V2



TSv2 ์•„ํ‚คํ…์ฒ˜์˜ ์ฃผ์š” ํŠน์ง•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. ์“ฐ๊ธฐ์™€ ์ฝ๊ธฐ ์—ญํ• ์„ ์™„์ „ํžˆ ๋ถ„๋ฆฌ
    ์ด๋ฒคํŠธ ์ˆ˜์ง‘๊ธฐ(Collector)๋Š” ๊ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋…ธ๋“œ์—์„œ ๋ถ„์‚ฐ ๋ฐฐ์น˜๋˜์–ด ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•˜๊ณ  ๋ฐฑ์—”๋“œ ์Šคํ† ๋ฆฌ์ง€๋กœ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
    ๋ฐ˜๋ฉด ์ฝ๊ธฐ๋Š” Timeline Reader๋ผ๋Š” ๋…๋ฆฝ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ „๋‹ดํ•˜์—ฌ REST API ์ฟผ๋ฆฌ๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
    ์ด ๊ตฌ์กฐ๋Š” ์ฝ๊ธฐ/์“ฐ๊ธฐ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜์—ฌ ์‹œ์Šคํ…œ ๋ณ‘๋ชฉ์„ ์ œ๊ฑฐํ•˜๊ณ  ์„ฑ๋Šฅ์„ ๋†’์ž…๋‹ˆ๋‹ค.

  2. ๋ถ„์‚ฐ ์ˆ˜์ง‘๊ธฐ ๊ตฌ์กฐ (Distributed Collector)
    ๊ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋งˆ์Šคํ„ฐ(ApplicationMaster)์™€ ๋™์ผ ๋…ธ๋“œ์— ์ˆ˜์ง‘๊ธฐ๊ฐ€ ๋™์ž‘ํ•˜๋ฉฐ, ์ด ์ˆ˜์ง‘๊ธฐ๊ฐ€ ์ด๋ฒคํŠธ๋ฅผ ์ง์ ‘ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค.
    ์˜ˆ๋ฅผ ๋“ค์–ด, Spark๋‚˜ Tez ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‹คํ–‰๋˜๋ฉด ํ•ด๋‹น ๋…ธ๋“œ์˜ ์ˆ˜์ง‘๊ธฐ๊ฐ€ ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰, ํƒœ์Šคํฌ ์‹คํŒจ, ์ž์› ์š”์ฒญ ๋“ฑ์˜ ์ด๋ฒคํŠธ๋ฅผ ์ง์ ‘ ๋ฐ›์•„ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค.
    ๋˜ํ•œ ๋‹ค๋ฅธ NodeManager๋„ ํ•ด๋‹น ๋…ธ๋“œ์˜ ์ˆ˜์ง‘๊ธฐ๋กœ ์ด๋ฒคํŠธ๋ฅผ ์ „์†กํ•ฉ๋‹ˆ๋‹ค.

  3. ๋ฐฑ์—”๋“œ ์ €์žฅ์†Œ๋กœ HBase ์ฑ„ํƒ (๊ธฐ๋ณธ)
    TSv2๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ Apache HBase๋ฅผ ์ด๋ฒคํŠธ ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
    HBase๋Š” ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ์™€ ์‹ค์‹œ๊ฐ„ ์ฟผ๋ฆฌ์— ๊ฐ•์ ์ด ์žˆ์–ด, ๋‹ค์ˆ˜์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ด๋ฒคํŠธ๋ฅผ ๋น ๋ฅด๊ฒŒ ์ €์žฅํ•˜๊ณ  ์ฝ์–ด์˜ค๋Š” ๋ฐ ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

  4. Flow ๋‹จ์œ„์˜ ๋ฐ์ดํ„ฐ ์ง‘๊ณ„ ๋ฐ ๋ถ„์„ ๊ธฐ๋Šฅ
    TSv2๋Š” ๋‹จ์ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์•„๋‹Œ ๋…ผ๋ฆฌ์  ์ž‘์—… ํ๋ฆ„ ๋‹จ์œ„์˜ ์ด๋ฒคํŠธ๋ฅผ ์ง‘๊ณ„ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
    ์˜ˆ๋ฅผ ๋“ค์–ด, ํ•˜๋‚˜์˜ BI ๋ถ„์„ ์›Œํฌํ”Œ๋กœ์šฐ๊ฐ€ ์—ฌ๋Ÿฌ Spark ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์œผ๋กœ ๊ตฌ์„ฑ๋˜์—ˆ๋‹ค๋ฉด, ์ด๋“ค์„ ํ•˜๋‚˜์˜ โ€œFlowโ€๋กœ ๋ฌถ์–ด์„œ ์ถ”์ ํ•˜๊ณ  ๋ฉ”ํŠธ๋ฆญ์„ ์ง‘๊ณ„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    ์‚ฌ์šฉ์ž๋Š” ์ „์ฒด ์›Œํฌํ”Œ๋กœ์šฐ์˜ ์‹คํ–‰ ์‹œ๊ฐ„, ์ž์› ์‚ฌ์šฉ๋Ÿ‰, ์˜ค๋ฅ˜ ๋นˆ๋„ ๋“ฑ์„ ํ†ตํ•ฉ์ ์œผ๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.



์‹ค๋ฌด ์˜ˆ์‹œ๋ฅผ ํ•˜๋‚˜ ๋“ค์–ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด, ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ ํŒŒ์ดํ”„๋ผ์ธ์ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ตฌ์กฐ๋กœ ๋™์ž‘ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ด…์‹œ๋‹ค.
Sqoop์„ ํ†ตํ•ด ์™ธ๋ถ€ RDBMS์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœํ•˜๊ณ , Spark๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€ํ™˜ํ•œ ํ›„, ๊ฒฐ๊ณผ๋ฅผ Hive์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
์ด ์ž‘์—…์€ ์—ฌ๋Ÿฌ YARN ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์œผ๋กœ ๋ถ„์‚ฐ๋˜์–ด ์‹คํ–‰๋˜์ง€๋งŒ, ์‚ฌ์šฉ์ž ์ž…์žฅ์—์„œ๋Š” ํ•˜๋‚˜์˜ โ€œ์—…๋ฌด ํ๋ฆ„(Flow)โ€์œผ๋กœ ์ธ์‹๋ฉ๋‹ˆ๋‹ค.

์ด๋•Œ Timeline Service v2๋Š” ๊ฐ ๋‹จ๊ณ„๋ณ„ ์ž์› ์‚ฌ์šฉ๋Ÿ‰, ํƒœ์Šคํฌ ์‹คํŒจ ํšŸ์ˆ˜ ๋ฐ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€, ์ „์ฒด ํ๋ฆ„์˜ ์‹คํ–‰ ์‹œ๊ฐ„๊ณผ ๋ณ‘๋ชฉ ์ง€์  ๋“ฑ์„ ํ†ตํ•ฉ์ ์œผ๋กœ ์ˆ˜์ง‘ํ•˜์—ฌ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์šด์˜์ž๋Š” ๋‹จ์ผ API ํ˜ธ์ถœ ๋˜๋Š” UI ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ํ†ตํ•ด ์ด ์ „์ฒด ํ๋ฆ„์˜ ์ƒํƒœ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํŠน์ • ๋‹จ๊ณ„์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ฑฐ๋‚˜ ์ž์› ์‚ฌ์šฉ์ด ๊ธ‰์ฆํ•œ ๋ถ€๋ถ„์„ ๋น ๋ฅด๊ฒŒ ์ง„๋‹จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.



Timeline Service v2๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด yarn-site.xml์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์„ค์ •์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

<property>
  <name>yarn.timeline-service.enabled</name>
  <value>true</value>
</property>

<property>
  <name>yarn.timeline-service.version</name>
  <value>2</value>
</property>

<property>
  <name>yarn.timeline-service.storage.type</name>
  <value>hbase</value>
</property>

ํ•ด๋‹น ์„ค์ •์€ Timeline Service๋ฅผ ํ™œ์„ฑํ™”ํ•˜๊ณ , v2 ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜๋ฉฐ, ์ €์žฅ์†Œ๋กœ HBase๋ฅผ ์„ ํƒํ•˜๋„๋ก ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
์ถ”๊ฐ€๋กœ HBase ํด๋Ÿฌ์Šคํ„ฐ์™€ ์—ฐ๊ฒฐ์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์–ด์•ผ ํ•˜๋ฉฐ, timeline.reader.webapp.address, timeline.collector.bind-host ๋“ฑ ๋„คํŠธ์›Œํฌ ๊ด€๋ จ ์†์„ฑ๋„ ํ™˜๊ฒฝ์— ๋งž๊ฒŒ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ, TimeLine Service 2๋Š” ๋ณด์•ˆ๊ณผ ๋ฉ€ํ‹ฐํ…Œ๋„Œ์‹œ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
Timeline Service v2๋Š” YARN์˜ ๋ฉ€ํ‹ฐํ…Œ๋„Œ์‹œ ํ™˜๊ฒฝ์„ ๊ณ ๋ คํ•˜์—ฌ ์‚ฌ์šฉ์ž๋ณ„ ์ ‘๊ทผ ์ œ์–ด ๋ฐ ๋ฐ์ดํ„ฐ ๋ถ„๋ฆฌ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด, ํŠน์ • ์‚ฌ์šฉ์ž์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰ ์ •๋ณด๋Š” ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๊ฐ€ ์กฐํšŒํ•  ์ˆ˜ ์—†๋„๋ก ACL์ด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ Time To Live ์ •์ฑ…์„ ์„ค์ •ํ•˜์—ฌ ์˜ค๋ž˜๋œ ์ด๋ฒคํŠธ ๋ฐ์ดํ„ฐ๋ฅผ ์ž๋™์œผ๋กœ ์‚ญ์ œํ•จ์œผ๋กœ์จ, ์ €์žฅ ๊ณต๊ฐ„ ๊ด€๋ฆฌ๋„ ํšจ์œจ์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ •๋ฆฌํ•ด๋ณด๋ฉด,
Timeline Service๋Š” ๋‹จ์ˆœํ•œ ๋กœ๊ทธ ์ˆ˜์ง‘๊ธฐ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.
์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํ–‰๋™ ์ด๋ ฅ์„ ์‹œ๊ฐ„ ์ถ•์œผ๋กœ ์ •๋ ฌํ•˜์—ฌ ์ €์žฅํ•˜๊ณ , ์ด๋ฅผ ๋ถ„์„ ๊ฐ€๋Šฅํ•œ ํ˜•ํƒœ๋กœ ์ œ๊ณตํ•˜๋Š” ํ†ตํ•ฉ ์ด๋ฒคํŠธ ๋ถ„์„ ํ”Œ๋žซํผ์ด๋ผ๊ณ  ๋ณด๋Š” ๊ฒƒ์ด ๋” ์ •ํ™•ํ•ฉ๋‹ˆ๋‹ค.
ํŠนํžˆ v2๋Š” ๋ถ„์‚ฐ ์ˆ˜์ง‘ ๊ตฌ์กฐ, HBase ์ €์žฅ์†Œ, ํ๋ฆ„ ๊ธฐ๋ฐ˜ ์ง‘๊ณ„ ๊ธฐ๋Šฅ์„ ํ†ตํ•ด YARN ํ™˜๊ฒฝ์—์„œ์˜ ์šด์˜ ์•ˆ์ •์„ฑ๊ณผ ๊ด€์ธก ๊ฐ€๋Šฅ์„ฑ(observability)์„ ํฌ๊ฒŒ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.

์‹ค์ œ ํด๋Ÿฌ์Šคํ„ฐ์—์„œ Timeline Service๋ฅผ ํ™œ์„ฑํ™”ํ•ด๋ณด๊ณ  ๋‹ค์–‘ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๋“ค์„ ์‹คํ–‰ํ•˜๋ฉฐ ๋ฐ์ดํ„ฐ๋ฅผ ์‹œ๊ฐํ™”ํ•ด๋ณด๋ฉด,
์žฅ์•  ๋ถ„์„, ์ž์› ์ตœ์ ํ™”, SLA ์ค€์ˆ˜ ์—ฌ๋ถ€ ํŒ๋‹จ ๋“ฑ ์—ฌ๋Ÿฌ ์ธก๋ฉด์—์„œ ์šด์˜ ํ’ˆ์งˆ์„ ๋น„์•ฝ์ ์œผ๋กœ ๋†’์ผ ์ˆ˜ ์žˆ์Œ์„ ์ฒด๊ฐํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.




โ—ˆ


โœ๏ธ ๊ฒฐ๋ก 

์˜ค๋Š˜์€ YARN์˜ ์ „์ฒด์ ์ธ ๊ตฌ์กฐ์™€ ๋™์ž‘ ์›๋ฆฌ์— ๋Œ€ํ•œ ๊ฐœ์š”๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์–ด๋–ป๊ฒŒ ์‹คํ–‰๋˜๊ณ  ์ž์›์ด ์–ด๋–ป๊ฒŒ ์Šค์ผ€์ค„๋ง๋˜๋Š”์ง€, ๊ทธ๋ฆฌ๊ณ  ๊ฐ ์‹คํ–‰ ์—”์ง„๋ณ„๋กœ ํ๋ฅผ ์–ด๋–ป๊ฒŒ ์„ค์ •ํ•˜๋Š”์ง€๊นŒ์ง€ ์ „๋ฐ˜์ ์ธ ํ๋ฆ„์„ ์‚ดํŽด๋ณด์•˜์Šต๋‹ˆ๋‹ค.

ํŠนํžˆ YARN์˜ ์Šค์ผ€์ค„๋ง ์ •์ฑ…์ธ FIFO Queue์™€ Fair Queue์˜ ์ฐจ์ด์ , ๊ทธ๋ฆฌ๊ณ  Spark, Hive, MapReduce ๋“ฑ ์ปดํฌ๋„ŒํŠธ๋ณ„๋กœ ํ๋ฅผ ์ง€์ •ํ•˜๋Š” ์‹ค์ œ ๋ฐฉ๋ฒ•๋“ค์„ ์˜ˆ์ œ์™€ ํ•จ๊ป˜ ํ™•์ธํ•˜๋ฉฐ, ์‹ค๋ฌด์—์„œ ์–ด๋–ป๊ฒŒ ์‘์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์ •๋ฆฌํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ, YARN Timeline Service์— ๋Œ€ํ•ด์„œ๋„ ๊ธฐ์ˆ ์ ์ธ ๊ด€์ ์—์„œ ๊นŠ์ด ์žˆ๊ฒŒ ์•Œ์•„๋ณด์•˜๋Š”๋ฐ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰ ์ค‘ ๋ฐœ์ƒํ•˜๋Š” ์ด๋ฒคํŠธ์™€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•˜๊ณ  ์ €์žฅํ•จ์œผ๋กœ์จ ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด ์ž‘์—…๋“ค์˜ ์ƒํƒœ๋ฅผ ์ถ”์ ํ•˜๊ณ  ๋ถ„์„ํ•  ์ˆ˜ ์žˆ๋Š” ํ•ต์‹ฌ ๊ธฐ๋Šฅ์ž„์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
์‹คํŒจ ์ด๋ ฅ, ์ž์› ์‚ฌ์šฉ๋Ÿ‰, ์ž‘์—… ์‹œ๊ฐ„๊ณผ ๊ฐ™์€ ์šด์˜์— ์ค‘์š”ํ•œ ์ •๋ณด๋ฅผ ํ•œ ๊ณณ์— ํ†ตํ•ฉํ•ด ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ํด๋Ÿฌ์Šคํ„ฐ ์šด์˜์ž ์ž…์žฅ์—์„œ๋Š” ๋ฐ˜๋“œ์‹œ ์•Œ์•„์•ผ ํ•  ๊ธฐ๋Šฅ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค.

YARN์˜ ๊ธฐ๋ณธ ๊ฐœ๋…๋ถ€ํ„ฐ ์‹ค๋ฌด์— ํ•„์š”ํ•œ ํฌ์ธํŠธ๊นŒ์ง€ ํ•œ ๋ฒˆ์— ์ •๋ฆฌํ•œ ์˜ค๋Š˜ ๋‚ด์šฉ์„ ๋ฐ”ํƒ•์œผ๋กœ, ํ–ฅํ›„ ์ง์ ‘ ์‹ค์Šตํ•ด๋ณด๊ณ  ์–ป์€ ์ธ์‚ฌ์ดํŠธ๋„ ํฌ์ŠคํŒ…ํ•  ๊ณ„ํš์ž…๋‹ˆ๋‹ค.
(์ด๋ฏธ ์‹ค๋ฌด์—์„œ๋Š” ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์ง€๋งŒ, ์ง‘์—์„œ๋„ ์ฒ˜์Œ๋ถ€ํ„ฐ ์„ค์น˜๋ถ€ํ„ฐ ์„ค์ •, ์žก ์‹คํ–‰, ๋ชจ๋‹ˆํ„ฐ๋ง๊นŒ์ง€ A to Z๋กœ ๋‹ค์‹œ ์ •๋ฆฌํ•ด๋ณผ ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.)

๊ธด ๊ธ€ ์ฝ์–ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. :D




โ—ˆ


๐Ÿ“š ๊ณต๋ถ€ ์ฐธ๊ณ  ์ž๋ฃŒ


๐Ÿ“‘ 1. ํŒจ์ŠคํŠธ ์บ ํผ์Šค - ํ•œ ๋ฒˆ์— ๋๋‚ด๋Š” ๋ฐ์ดํ„ฐ ์—”์ง€๋‹ˆ์–ด๋ง ์ดˆ๊ฒฉ์ฐจ ํŒจํ‚ค์ง€ Online.

๐Ÿ“‘ 2. ๋ฐ์ดํ„ฐ์—”์ง€๋‹ˆ์–ด๋ง Yarn

๐Ÿ“‘ 3. Hadoop YARN ๊ณต์‹ ๋งค๋‰ด์–ผ

๐Ÿ“‘ 4. YARN Capacity scheduler ํŠน์ง• ๋ฐ Queue ์˜ต์…˜

๐Ÿ“‘ 5. OREILLY ํ•˜๋‘ก ์™„๋ฒฝ ๊ฐ€์ด๋“œ 4ํŒ