Home > ๐Ÿ“– ๊ฐœ์ธ ๊ณต๋ถ€ > ๐Ÿ‘‰ Apache Hadoop > ๐Ÿ“˜ Map Reduce ๊ธฐ๋ณธ ์ด๋ก ๊ณผ ์‹ค์Šต

๐Ÿ“˜ Map Reduce ๊ธฐ๋ณธ ์ด๋ก ๊ณผ ์‹ค์Šต
Apache Hadoop Study

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

๐Ÿ“˜ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์˜ ์ดํ•ด์™€ ํ•˜๋‘ก์˜ ๋“ฑ์žฅ ๋ฐฐ๊ฒฝ
๐Ÿ“˜ ํ•˜๋‘ก์˜ ํ•ต์‹ฌ ๊ตฌ์„ฑ์š”์†Œ์™€ ์ด๋ก 
๐Ÿ“˜ YARN(Yet Another Resource Negotiator) ๊ธฐ๋ณธ ์ด๋ก 




โ—ˆ


๐Ÿ˜ 1. Map Reduce


MapReduce๋Š” ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„์‚ฐ ํ™˜๊ฒฝ์—์„œ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ชจ๋ธ์ด์ž ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค.
์ด ๋ชจ๋ธ์€ ์›๋ž˜ 2004๋…„ ๊ตฌ๊ธ€์—์„œ ๋ฐœํ‘œ๋˜์—ˆ์œผ๋ฉฐ, Apache Hadoop์€ ์ด๋ฅผ ์˜คํ”ˆ์†Œ์Šค ํ”„๋ ˆ์ž„์›Œํฌ๋กœ ๊ตฌํ˜„ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
Hadoop์˜ MapReduce๋Š” ํŠนํžˆ HDFS์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ๋˜์–ด, ์ˆ˜๋ฐฑ GB์—์„œ ์ˆ˜ PB ๊ทœ๋ชจ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์—ฌ๋Ÿฌ ๋Œ€์˜ ์ปดํ“จํ„ฐ์— ๋‚˜๋ˆ  ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

MapReduce๋Š” ๋ฐ์ดํ„ฐ๋ฅผ Key-Value ํ˜•ํƒœ๋กœ ๊ฐ€๊ณตํ•˜๋ฉฐ, ์ฒ˜๋ฆฌ ๊ณผ์ •์€ ํฌ๊ฒŒ Map ๋‹จ๊ณ„์™€ Reduce ๋‹จ๊ณ„๋กœ ๋‚˜๋‰ฉ๋‹ˆ๋‹ค.
Map ๋‹จ๊ณ„์—์„œ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„ํ• ํ•˜๊ณ  ๋ณ‘๋ ฌ๋กœ ์ฒ˜๋ฆฌํ•˜๋ฉฐ, Reduce ๋‹จ๊ณ„์—์„œ๋Š” ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์ˆ˜์ง‘ํ•˜๊ณ  ํ†ตํ•ฉํ•ฉ๋‹ˆ๋‹ค.

์ด ๊ตฌ์กฐ ๋•๋ถ„์— ๊ฐœ๋ฐœ์ž๋Š” Map๊ณผ Reduce ํ•จ์ˆ˜๋งŒ ์ •์˜ํ•˜๋ฉด ๋˜๊ณ , ๋‚˜๋จธ์ง€ ์ž‘์—…(Job ๋ถ„ํ• , Task ๋ฐฐ์ •, ์žฅ์•  ๋ณต๊ตฌ ๋“ฑ)์€ Hadoop์ด ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ Java๋ฅผ ๊ธฐ๋ณธ์œผ๋กœ ํ•˜์ง€๋งŒ, C++, Python ๋“ฑ ๋‹ค์–‘ํ•œ ์–ธ์–ด๋„ ์ง€์›๋ฉ๋‹ˆ๋‹ค (์˜ˆ: Hadoop Streaming ์‚ฌ์šฉ ์‹œ).

๋”ฐ๋ผ์„œ ๊ฐœ๋ฐœ์ž๋Š” ์ธํ”„๋ผ ๊ฑฑ์ • ์—†์ด ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๊ตฌํ˜„์— ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๐Ÿ˜ 2. MapReduce ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ๊ตฌ๋™๋ฐฉ์‹


MapReduce๋Š” ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€ ํ•จ์ˆ˜๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๐Ÿ“Œ Map Function
    ์ž…๋ ฅ ๋ฐ์ดํ„ฐ๋ฅผ (key1, value1) ํ˜•ํƒœ๋กœ ๋ฐ›์•„, ์ด๋ฅผ (key2, value2) ํ˜•ํƒœ์˜ ์ค‘๊ฐ„ ๊ฒฐ๊ณผ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

    ex : (key1, value1) โ†’ (key2, value2)

  • ๐Ÿ“Œ Reduce Function
    Map ๋‹จ๊ณ„์—์„œ ์ƒ์„ฑ๋œ ์ค‘๊ฐ„ ๊ฒฐ๊ณผ๋“ค์„ key ๊ธฐ์ค€์œผ๋กœ ๊ทธ๋ฃนํ™”ํ•œ ๋’ค, ๊ฐ™์€ key๋ฅผ ๊ฐ–๋Š” ๊ฐ’๋“ค์˜ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ฐ›์•„ ์ตœ์ข… ๊ฒฐ๊ณผ (key3, value3)์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

    ex : (key2, List<value2>) โ†’ (key3, value3)

์ด๋Ÿฌํ•œ ๋‘ ๋‹จ๊ณ„๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋Š” ๋ถ„์‚ฐ ํ™˜๊ฒฝ์—์„œ ๋ณ‘๋ ฌ๋กœ ์ฒ˜๋ฆฌ๋˜๋ฉฐ, ์ตœ์ข…์ ์œผ๋กœ ์ง‘๊ณ„ ๋ฐ ๊ฐ€๊ณต๋œ ๊ฒฐ๊ณผ๋ฅผ ์–ป๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ MapReduce ์˜ ๊ตฌ๋™ ๋ฐฉ์‹์€ ํฌ๊ฒŒ ์„ธ ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค.

  • ๐Ÿ”น Local
    ๋‹จ์ผ JVM ์—์„œ ์ „์ฒด Job ์„ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ, ํ…Œ์ŠคํŠธ ์šฉ๋„ ์ •๋„๋กœ๋งŒ ์“ฐ์ด์ง€ ์‹ค์ œ๋กœ๋Š” ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์œผ๋กœ ์šด์˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  • ๐Ÿ”น Classic
    Hadoop 1.0 ๋ฒ„์ „๋•Œ๊นŒ์ง€ ์œ ์ง€ํ•˜๋˜ Map Reduce ๋ถ„์‚ฐ ์ฒ˜๋ฆฌ ๋ฐฉ์‹์ด๋ฉฐ, 1๊ฐœ์˜ Job Tracker ์™€ ์—ฌ๋Ÿฌ๊ฐœ์˜ Task Tracker ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ดˆ๊ธฐ Map Reduce ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

  • ๐Ÿ”น YARN
    Hadoop 2.0 YARN ๋„์›€ ์ดํ›„์˜ Map Reduce ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. Map Reduce ์ด์™ธ์˜ ์›Œํฌ๋กœ๋“œ๋„ ์ˆ˜์šฉ์ด ๊ฐ€๋Šฅํ•œ ๋ฒ„์ „์ž…๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ Map Reduce ๋Š”, ๋‹จ์ˆœํ•˜๊ณ  ์‚ฌ์šฉ์ด ํŽธ๋ฆฌํ•˜๋ฉฐ, ํŠน์ • ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์ด๋‚˜ ์Šคํ‚ค๋งˆ์— ์˜์กด์ ์ด์ง€ ์•Š์€ ์œ ์—ฐ์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ , ์ €์žฅ ๊ตฌ์กฐ๋„ ๋…๋ฆฝ์ ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ ๋ฐ์ดํ„ฐ ๋ณต์ œ์— ๊ธฐ๋ฐ˜ํ•œ ๋‚ด๊ตฌ์„ฑ๊ณผ ์ž์ฒด ์žฌ์‹œ๋„ ๋กœ์ง์„ ํ†ตํ•œ ๋‚ด๊ณ ์žฅ์„ฑ๋„ ํ™•๋ณดํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ํ•˜๋‘ก์„ ํ™œ์šฉํ•œ ๋†’์€ ํ™•์žฅ์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜, ๊ณ ์ •๋œ ๋‹จ์ผ ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ , Hive ๋“ฑ์ด ์žˆ์ง€๋งŒ ์—ฌ์ „ํžˆ DBMS ๋ณด๋‹ค๋Š” ๋ถˆํŽธํ•œ ์Šคํ‚ค๋งˆ ์งˆ์˜, ๊ทธ๋ฆฌ๊ณ  ์ž‘์—… ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ์— ์ ํ•ฉํ•˜์ง€ ์•Š๊ณ , ๊ธฐ์ˆ  ์ง€์›์ด ์–ด๋ ต๋‹ค๋Š” ๋‹จ์ ๋“ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿผ ์ง€๊ธˆ๋ถ€ํ„ฐ, MapReduce ์— ๋Œ€ํ•ด ์ข€ ๋” ์ž์„ธํžˆ ๊ณต๋ถ€ํ•œ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.


๐Ÿ˜ 3. Map Reduce 1.0 & ๊ธฐ๋ณธ

ํŒŒํŠธ๋ฅผ 1.0 ๊ณผ 2.0 ์œผ๋กœ ๋‚˜๋ˆ„๊ธฐ๋Š” ํ•˜์˜€์ง€๋งŒ, Map Reduce 1.0 ๊ณผ 2.0 ์ด ํฌ๊ฒŒ ์ฐจ์ด๊ฐ€ ์žˆ์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

์–ด๋А์ •๋„ ๋‹จ์ ์„ ๋ณด์™„ํ•ด์ฃผ๊ณ , YARN ์„ ํ†ตํ•ด ๊ตฌ๋™ํ•˜๋Š”๊ฐ€ ์•ˆํ•˜๋Š”๊ฑฐ ์ •๋„๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ํ˜„์žฌ 1.2 ํŒŒํŠธ์—์„œ๋Š” 1.0๊ณผ ํ˜„์žฌ Map Reduce ์˜ ๊ธฐ๋ณธ์ด ๋˜๋Š” ๋ถ€๋ถ„์„ ๊ณต๋ถ€ํ•˜๊ณ  ์ •๋ฆฌํ•˜์˜€์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ ํŒŒํŠธ์ธ MapReduce 2.0 ์—์„œ๋Š” ๋ณ€๋™์‚ฌํ•ญ๋งŒ ์ •๋ฆฌํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.


๐Ÿ˜ 3.1. Hadoop 1.x์—์„œ์˜ MapReduce ๊ตฌ์„ฑ ์š”์†Œ


Hadoop 1.x์—์„œ๋Š” ํด๋ž˜์‹ MapReduce ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜๋ฉฐ, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฃผ์š” ์ปดํฌ๋„ŒํŠธ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.

  1. JobTracker (1๊ฐœ):
    ํด๋Ÿฌ์Šคํ„ฐ ์ „์ฒด์—์„œ Job์˜ ์‹คํ–‰์„ ์ด๊ด„ํ•˜๋Š” ๋งˆ์Šคํ„ฐ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.
    ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ Job์„ ๋ฐ›์•„ Task๋กœ ๋‚˜๋ˆ„๊ณ , ์ ์ ˆํ•œ TaskTracker์—๊ฒŒ ๋ถ„๋ฐฐํ•ฉ๋‹ˆ๋‹ค.

  2. TaskTracker (์—ฌ๋Ÿฌ ๊ฐœ):
    ๊ฐ๊ฐ์˜ ๋…ธ๋“œ์— ์กด์žฌํ•˜๋ฉฐ, JobTracker๋กœ๋ถ€ํ„ฐ Task๋ฅผ ํ• ๋‹น๋ฐ›์•„ ์‹ค์ œ๋กœ Map ๋˜๋Š” Reduce ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  3. Client:
    ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ์ž‘์„ฑํ•œ MapReduce Job์„ hadoop jar ๋ช…๋ น์–ด๋กœ ์‹คํ–‰ํ•˜๋ฉด, ์ด Job์„ ์ œ์ถœํ•˜๋Š” ์ฃผ์ฒด๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

  4. HDFS:
    Job ์‹คํ–‰ ์ค‘ ์‚ฌ์šฉ๋˜๋Š” ์ž…๋ ฅ ํŒŒ์ผ, ์ค‘๊ฐ„ ํŒŒ์ผ, ์ถœ๋ ฅ ํŒŒ์ผ ๋“ฑ์€ ๋ชจ๋‘ HDFS ์ƒ์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.
    Mapper/Reducer ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ๊ณต์œ ๋„ HDFS๋ฅผ ํ†ตํ•ด ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค.


๐Ÿ˜ 3.2. MapReduce๋Š” ์–ธ์ œ ๋™์ž‘ํ•˜๋Š”๊ฐ€?


MapReduce๋Š” ๋‹จ์ˆœํ•œ ํŒŒ์ผ ์—…๋กœ๋“œ, ๋‹ค์šด๋กœ๋“œ, ์‚ญ์ œ์™€ ๊ฐ™์€ ๋ช…๋ น์–ด์—์„œ๋Š” ๋™์ž‘ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
์ฆ‰, hdfs dfs -put, -get, -ls, -rm ๊ฐ™์€ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋Š” MapReduce๊ฐ€ ๊ด€์—ฌํ•˜์ง€ ์•Š์œผ๋ฉฐ,
์ด ๊ฒฝ์šฐ HDFS ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ง์ ‘ NameNode์™€ DataNode์— ์š”์ฒญ์„ ๋ณด๋‚ด ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

๋ฐ˜๋ฉด, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ์—๋Š” MapReduce ์—”์ง„์ด ์‹ค์ œ๋กœ Job์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  • hadoop jar๋กœ ์‹คํ–‰ํ•œ MapReduce ํ”„๋กœ๊ทธ๋žจ

  • Hive, Pig, Oozie ๋“ฑ์—์„œ MapReduce ๋ฐฑ์—”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ฟผ๋ฆฌ ์‹คํ–‰

  • Sqoop import/export ์ž‘์—…

  • ๊ธฐํƒ€ ์‚ฌ์šฉ์ž ์ •์˜ ๋ถ„์„ Job

์ด์ฒ˜๋Ÿผ MapReduce๋Š” โ€œ๋ถ„์‚ฐ ์ฒ˜๋ฆฌ Jobโ€์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋งŒ ์‹คํ–‰๋˜๋ฉฐ, ์‰ฝ๊ฒŒ ํ’€์–ด๋ณด๋ฉด Hadoop ์ž‘์—… ์ž์ฒด์—์„œ ๋™์ž‘ํ•˜๋ ค๋ฉด MapReduce ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•œ ์ฝ”๋”ฉ์ด ํ•„์š”ํ•˜๊ณ , Hive ์™€ ๊ฐ™์€ ์—”์ง„์—์„œ๋Š” Hive์—์„œ ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด, Hive๊ฐ€ ๋‚ด๋ถ€์ ์œผ๋กœ ์ด ์ฟผ๋ฆฌ๋ฅผ MapReduce ์ž‘์—…(๋˜๋Š” Spark, Tez ๊ฐ™์€ ๋‹ค๋ฅธ ์‹คํ–‰ ์—”์ง„)์œผ๋กœ ๋ณ€ํ™˜ํ•ด ์ฃผ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ( Hive ์„ค์ •์ด๋‚˜ ํ™˜๊ฒฝ์— ๋”ฐ๋ผ MapReduce๊ฐ€ ๊ธฐ๋ณธ ์‹คํ–‰ ์—”์ง„์ด๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ์—”์ง„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. )


๐Ÿ˜ 3.3. MapReduce Task ๊ตฌ๋™ ์ ˆ์ฐจ


MapReduce

์ถœ์ฒ˜ : Map Reduce 1.0 ์ƒ์„ธ ๊ตฌ๋™ ์ ˆ์ฐจ


  1. ์‚ฌ์šฉ์ž ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰
    ์‚ฌ์šฉ์ž๊ฐ€ ํด๋ผ์ด์–ธํŠธ์—์„œ MapReduce ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๋ฉด, ๋‚ด๋ถ€์ ์œผ๋กœ JobClient๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

  2. Job ID ๋ฐœ๊ธ‰ ์š”์ฒญ
    JobClient๋Š” ํด๋Ÿฌ์Šคํ„ฐ์˜ JobTracker์— ์—ฐ๊ฒฐํ•˜์—ฌ ์ƒˆ๋กœ์šด Job ID๋ฅผ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค.

  3. Job ๋ฆฌ์†Œ์Šค HDFS ์—…๋กœ๋“œ
    ์‹คํ–‰์— ํ•„์š”ํ•œ ์ฝ”๋“œ, ์„ค์ • ํŒŒ์ผ, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋“ฑ์„ HDFS์— ์—…๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.

  4. JobTracker์— Job ์ œ์ถœ
    JobClient๋Š” JobTracker์—๊ฒŒ Job์„ ์ œ์ถœํ•˜๋ฉฐ, ์ดํ›„ ์ž‘์—… ์Šค์ผ€์ค„๋ง์€ JobTracker๊ฐ€ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

  5. Job ์ดˆ๊ธฐํ™”
    JobTracker๋Š” ์ œ์ถœ๋œ Job์— ๋Œ€ํ•œ ์ดˆ๊ธฐํ™” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค (๋ฉ”ํƒ€์ •๋ณด ๊ตฌ์„ฑ, ๋””๋ ‰ํ„ฐ๋ฆฌ ์ƒ์„ฑ ๋“ฑ).

  6. InputSplit ๊ฒ€์ƒ‰
    HDFS์—์„œ ์ž…๋ ฅ ๋ฐ์ดํ„ฐ๋ฅผ ๋ธ”๋ก ๋‹จ์œ„๋กœ ๋‚˜๋ˆˆ ํ›„, ๊ฐ ๋ธ”๋ก์˜ ์œ„์น˜ ์ •๋ณด๋ฅผ ๊ธฐ์ค€์œผ๋กœ InputSplit์„ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.
    InputSplits ๋Š”, ๋ฌผ๋ฆฌ์  Block ๋“ค์„ ๋…ผ๋ฆฌ์ ์œผ๋กœ ๊ทธ๋ฃจํ•‘ ํ•œ ๊ฐœ๋…์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    InputSplit ์€ Mapper ์˜ ์ž…๋ ฅ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„ํ• ํ•˜๋Š” ๋ฐฉ์‹์„ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด, ๋ฐ์ดํ„ฐ ์œ„์น˜์™€ ์ฝ์–ด ๋“ค์ด๋Š” ๊ธธ์ด๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

  7. Task ํ• ๋‹น ์š”์ฒญ (Heartbeat)
    TaskTracker๋Š” ์ฃผ๊ธฐ์ ์œผ๋กœ JobTracker์— ํ•˜ํŠธ๋น„ํŠธ๋ฅผ ๋ณด๋‚ด๋ฉฐ, ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ Task๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

  8. Job ๋ฆฌ์†Œ์Šค ๋กœ์ปฌ ๋ณต์‚ฌ
    Task๊ฐ€ ํ• ๋‹น๋˜๋ฉด, TaskTracker๋Š” HDFS์—์„œ ํ•„์š”ํ•œ Job ๋ฆฌ์†Œ์Šค๋ฅผ ์ž์‹ ์˜ ๋กœ์ปฌ ๋””๋ ‰ํ„ฐ๋ฆฌ๋กœ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค.

  9. Child JVM ์‹คํ–‰
    TaskTracker๋Š” ์ž์‹ JVM ํ”„๋กœ์„ธ์Šค๋ฅผ ์ƒ์„ฑํ•˜์—ฌ, Map ๋˜๋Š” Reduce Task๋ฅผ ์‹คํ–‰ํ•  ์ค€๋น„๋ฅผ ํ•ฉ๋‹ˆ๋‹ค.

  10. Map ๋˜๋Š” Reduce Task ์‹คํ–‰
    ํ• ๋‹น๋ฐ›์€ Task๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์‹ค์ œ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ(Map ๋˜๋Š” Reduce ๋กœ์ง)๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ’ฌ ์ฐธ๊ณ : ์œ„ ์ ˆ์ฐจ๋Š” Hadoop 1.x (MapReduce v1) ๊ธฐ์ค€์ž…๋‹ˆ๋‹ค.
Hadoop 2.x ์ด์ƒ์—์„œ๋Š” YARN์ด ๋„์ž…๋˜๋ฉฐ JobTracker/TaskTracker๊ฐ€ ResourceManager/NodeManager๋กœ ๋Œ€์ฒด๋ฉ๋‹ˆ๋‹ค.


๐Ÿ˜ 3.4. MapReduce ๋™์ž‘ ๊ณผ์ •


MapReduce ๋Š” ๋‹ค์Œ 6๊ฐ€์ง€ ๋™์ž‘ ๊ณผ์ •์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค.

  1. ์ž…๋ ฅ ๋ฐ์ดํ„ฐ ๋ถ„ํ•  (Input Splitting)
    • ๋Œ€์šฉ๋Ÿ‰ ์ž…๋ ฅ ํŒŒ์ผ์„ ์—ฌ๋Ÿฌ ๊ฐœ์˜ Input Split์œผ๋กœ ๋‚˜๋ˆ•๋‹ˆ๋‹ค.
    • ๊ฐ Split์€ ๋ณ‘๋ ฌ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ์†Œ ๋‹จ์œ„์ž…๋‹ˆ๋‹ค.
    • ๋ณดํ†ต HDFS ๋ธ”๋ก ํฌ๊ธฐ(์˜ˆ: 128MB)๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋‚˜๋‰ฉ๋‹ˆ๋‹ค.
  2. ๋งต(Map) ๋‹จ๊ณ„
    • ๊ฐ Input Split์— ๋Œ€ํ•ด Map ํ•จ์ˆ˜๊ฐ€ ๋ณ‘๋ ฌ๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
    • Map ํ•จ์ˆ˜๋Š” ์ž…๋ ฅ ๋ฐ์ดํ„ฐ๋ฅผ ํ‚ค-๊ฐ’ ์Œ (key-value pair)์œผ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
    • ์˜ˆ๋ฅผ ๋“ค์–ด, ํ…์ŠคํŠธ ํŒŒ์ผ์„ ์ค„ ๋‹จ์œ„๋กœ ์ฝ์–ด ๋‹จ์–ด๋ณ„๋กœ (๋‹จ์–ด, 1) ์Œ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
    • Map ํ•จ์ˆ˜ ๊ฒฐ๊ณผ๋Š” ๋ฉ”๋ชจ๋ฆฌ ๋ฒ„ํผ์— ์ž„์‹œ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.
  3. ์ค‘๊ฐ„ ์ •๋ ฌ ๋ฐ ๋ณ‘ํ•ฉ (Sort and Merge)
    • Map ์ถœ๋ ฅ ๊ฒฐ๊ณผ๋Š” ๋‚ด๋ถ€์—์„œ ํ‚ค๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌ๋ฉ๋‹ˆ๋‹ค.
    • ์ •๋ ฌ๋œ ๊ฒฐ๊ณผ๋Š” ๋””์Šคํฌ์— ์ž„์‹œ ์ €์žฅ๋˜๋ฉฐ, ์—ฌ๋Ÿฌ Map ๊ฒฐ๊ณผ๋ฅผ ๋ณ‘ํ•ฉ(merge)ํ•ฉ๋‹ˆ๋‹ค.
    • ์ด ๋‹จ๊ณ„๋Š” ํ›„์† ์ž‘์—…์ธ Shuffle์„ ์›ํ™œํ•˜๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
  4. ์…”ํ”Œ(Shuffle)
    • ๊ฐ Mapper์—์„œ ์ •๋ ฌ๋œ ๋ฐ์ดํ„ฐ๋ฅผ Reducer๋กœ ์ „์†กํ•ฉ๋‹ˆ๋‹ค.
    • ๋™์ผํ•œ ํ‚ค๋ฅผ ๊ฐ€์ง„ ๋ชจ๋“  ๊ฐ’์ด ํ•˜๋‚˜์˜ Reducer์— ๋ชจ์ด๋„๋ก ๋ฐ์ดํ„ฐ๋ฅผ ๋„คํŠธ์›Œํฌ๋กœ ์ด๋™์‹œํ‚ต๋‹ˆ๋‹ค.
    • ์ด ๊ณผ์ •์€ Map๊ณผ Reduce ์ž‘์—…์˜ ์ค‘๊ฐ„ ๋‹จ๊ณ„๋กœ ๋„คํŠธ์›Œํฌ I/O๋ฅผ ๋งŽ์ด ๋ฐœ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.
  5. ๋ฆฌ๋“€์Šค(Reduce) ๋‹จ๊ณ„
    • Reducer๋Š” ์ „๋‹ฌ๋ฐ›์€ ํ‚ค๋ณ„๋กœ ๊ทธ๋ฃนํ™”๋œ ๊ฐ’์„ ์ž…๋ ฅ๋ฐ›์•„ ์ง‘๊ณ„ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
    • ์˜ˆ๋ฅผ ๋“ค์–ด, (๋‹จ์–ด, [1,1,1,...]) ๊ฐ’์„ ๋ฐ›์•„ ๋‹จ์–ด ๋“ฑ์žฅ ํšŸ์ˆ˜๋ฅผ ํ•ฉ์‚ฐํ•ฉ๋‹ˆ๋‹ค.
    • Reduce ํ•จ์ˆ˜ ๊ฒฐ๊ณผ๋Š” ์ตœ์ข… ์ถœ๋ ฅ(key-value ์Œ)์œผ๋กœ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.
  6. ๊ฒฐ๊ณผ ์ €์žฅ (Output)
    • Reduce ์ž‘์—…์˜ ๊ฒฐ๊ณผ๋Š” HDFS ๊ฐ™์€ ๋ถ„์‚ฐ ํŒŒ์ผ ์‹œ์Šคํ…œ์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.
    • ์ถœ๋ ฅ ํŒŒ์ผ์€ ์—ฌ๋Ÿฌ ํŒŒํ‹ฐ์…˜์œผ๋กœ ๋‚˜๋ˆ„์–ด ์ €์žฅ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์š”์•ฝํ•ด๋ณด๋ฉด, ์•„๋ž˜ ํ‘œ์ฒ˜๋Ÿผ ๋ณผ ์ˆ˜ ์žˆ๊ฒ ์Šต๋‹ˆ๋‹ค.

๋‹จ๊ณ„ ์„ค๋ช…
1. ์ž…๋ ฅ ๋ถ„ํ•  ๋ฐ์ดํ„ฐ๋ฅผ ์—ฌ๋Ÿฌ Split์œผ๋กœ ๋‚˜๋ˆ”
2. ๋งต(Map) ๊ฐ Split์— ๋Œ€ํ•ด Map ํ•จ์ˆ˜ ์‹คํ–‰
3. ์ •๋ ฌ ๋ฐ ๋ณ‘ํ•ฉ Map ๊ฒฐ๊ณผ๋ฅผ ํ‚ค๋ณ„๋กœ ์ •๋ ฌ, ๋ณ‘ํ•ฉ
4. ์…”ํ”Œ(Shuffle) ํ‚ค๋ณ„๋กœ ๋ฐ์ดํ„ฐ๋ฅผ Reducer์— ์ „์†ก
5. ๋ฆฌ๋“€์Šค(Reduce) ํ‚ค๋ณ„๋กœ ์ง‘๊ณ„ ์ž‘์—… ์ˆ˜ํ–‰
6. ์ถœ๋ ฅ ์ €์žฅ ์ตœ์ข… ๊ฒฐ๊ณผ๋ฅผ ๋ถ„์‚ฐ ํŒŒ์ผ ์‹œ์Šคํ…œ์— ์ €์žฅ


๐Ÿ˜ 3.5. MapReduce ์˜ˆ์‹œ


MapReduce

์ถœ์ฒ˜ : Map Reduce ์˜ˆ์‹œ


  1. ์ž…๋ ฅ ๋ฐ์ดํ„ฐ ๋ถ„ํ•  (Input Splitting)
    100GB์งœ๋ฆฌ ํ…์ŠคํŠธ ํŒŒ์ผ์ด ์žˆ๋‹ค๊ณ  ํ•ฉ์‹œ๋‹ค. ์ด ํŒŒ์ผ์€ HDFS์— ์ €์žฅ๋˜๊ณ , 128MB ํฌ๊ธฐ ๋‹จ์œ„๋กœ ์ชผ๊ฐœ์ง‘๋‹ˆ๋‹ค.
    ๊ฐ 128MB ์กฐ๊ฐ ํ•˜๋‚˜๊ฐ€ ํ•˜๋‚˜์˜ Input Split์ด ๋ฉ๋‹ˆ๋‹ค.

  2. ๋งต(Map) ๋‹จ๊ณ„
    ๊ฐ Input Split์€ ๋ณ„๋„์˜ Map Task์— ํ• ๋‹น๋˜์–ด ๋ณ‘๋ ฌ๋กœ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค.
    Map ํ•จ์ˆ˜๋Š” ํ…์ŠคํŠธ๋ฅผ ์ค„ ๋‹จ์œ„๋กœ ์ฝ๊ณ , ๊ฐ ์ค„์—์„œ ๋‹จ์–ด๋ฅผ ๋ถ„๋ฆฌํ•ด (๋‹จ์–ด, 1) ์Œ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
    ์˜ˆ๋ฅผ ๋“ค์–ด, ํ•œ ์ค„์— โ€œAndy and Bobโ€์ด ์žˆ์œผ๋ฉด (Andy, 1), (and, 1), (Bob, 1) ์ด๋Ÿฐ ์‹์ž…๋‹ˆ๋‹ค.
    ์ด๋ ‡๊ฒŒ ๋ชจ๋“  ๋‹จ์–ด์— ๋Œ€ํ•ด 1์”ฉ ๋ถ™์—ฌ์„œ ์ค‘๊ฐ„ ๊ฒฐ๊ณผ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

  3. ์ค‘๊ฐ„ ์ •๋ ฌ ๋ฐ ๋ณ‘ํ•ฉ (Sort & Merge)
    ๊ฐ Map Task๊ฐ€ ๋งŒ๋“  (๋‹จ์–ด, 1) ์Œ๋“ค์€ ํ‚ค(๋‹จ์–ด) ๊ธฐ์ค€์œผ๋กœ ๋‚ด๋ถ€ ์ •๋ ฌ๋ฉ๋‹ˆ๋‹ค.
    ๋ฉ”๋ชจ๋ฆฌ ๋ฒ„ํผ๊ฐ€ ์ฐจ๋ฉด ๋””์Šคํฌ์— spill ํ•˜์—ฌ ์ž„์‹œ ์ €์žฅ๋˜๊ณ , ์—ฌ๋Ÿฌ ๋ฒˆ spill๋œ ๋ฐ์ดํ„ฐ๋Š” ํ•˜๋‚˜๋กœ ๋ณ‘ํ•ฉ๋ฉ๋‹ˆ๋‹ค.
    ์ด ๊ณผ์ • ๋•๋ถ„์— ํ›„์† ์ž‘์—…์ธ Shuffle์ด ํšจ์œจ์ ์œผ๋กœ ์ง„ํ–‰๋ฉ๋‹ˆ๋‹ค.

  4. ์…”ํ”Œ(Shuffle)
    ๊ฐ Map Task๊ฐ€ ์ •๋ ฌํ•œ ๋‹จ์–ด๋ณ„ ๋ฐ์ดํ„ฐ๋ฅผ, ๋™์ผํ•œ ๋‹จ์–ด๋ฅผ ์ฒ˜๋ฆฌํ•  Reduce Task๋กœ ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ์ „์†กํ•ฉ๋‹ˆ๋‹ค.
    ์ฆ‰, โ€œAndyโ€์— ํ•ด๋‹นํ•˜๋Š” ๋ชจ๋“  (Andy, 1) ๋ฐ์ดํ„ฐ๋Š” ํŠน์ • Reduce Task๋กœ ๋ชจ์ž…๋‹ˆ๋‹ค.
    ์ด ๋‹จ๊ณ„๋Š” Map๊ณผ Reduce ์‚ฌ์ด์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์žฌ๋ถ„๋ฐฐํ•˜๋Š” ์ค‘์š”ํ•œ ๊ณผ์ •์ž…๋‹ˆ๋‹ค.

  5. ๋ฆฌ๋“€์Šค(Reduce) ๋‹จ๊ณ„
    Reduce Task๋Š” ํ•œ ๋‹จ์–ด์— ๋Œ€ํ•œ ๋ชจ๋“  1๋“ค์˜ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ „๋‹ฌ๋ฐ›์•„ ํ•ฉ๊ณ„๋ฅผ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.
    ์˜ˆ๋ฅผ ๋“ค์–ด, (Andy, [1, 1, 1, 1])์ด๋ฉด ์ตœ์ข…์ ์œผ๋กœ (Andy, 4)๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.
    ์ด ๊ณ„์‚ฐ์„ ๋ชจ๋“  ๋‹จ์–ด์— ๋Œ€ํ•ด ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  6. ๊ฒฐ๊ณผ ์ €์žฅ (Output)
    ์ตœ์ข… (๋‹จ์–ด, ์ดํšŸ์ˆ˜) ๊ฒฐ๊ณผ๋“ค์€ HDFS ๊ฐ™์€ ๋ถ„์‚ฐ ํŒŒ์ผ ์‹œ์Šคํ…œ์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.
    ๊ฒฐ๊ณผ ํŒŒ์ผ๋“ค์€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํŒŒํ‹ฐ์…˜์œผ๋กœ ๋‚˜๋‰  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

MapReduce ์˜ ํ•ด๋‹น ๊ณผ์ •์„ ํ†ตํ•ด, ์ˆ˜๋ฐฑ GB ํ…์ŠคํŠธ ํŒŒ์ผ์—์„œ๋„ ๋‹จ์–ด๋ณ„ ๋“ฑ์žฅ ํšŸ์ˆ˜๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์…€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๐Ÿ˜ 3.6. MapReduce ์˜ˆ์‹œ ๊ตฌํ˜„์„ ์œ„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค


MapReduce๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ธํ„ฐํŽ˜์ด์Šค ํ๋ฆ„์„ ํ†ตํ•ด ์ž…๋ ฅ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ  ์ถœ๋ ฅ๊นŒ์ง€ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค:

  • Input โ†’ Mapper โ†’ Combiner(์„ ํƒ ์‚ฌํ•ญ) โ†’ Partitioner โ†’ Shuffle/Sort โ†’ Reducer โ†’ Output

๐Ÿ”น Input: TextInputFormat
์ž…๋ ฅ ๋ฐ์ดํ„ฐ๋ฅผ (k1, v1) ํ˜•ํƒœ๋กœ ์ฝ์–ด์˜ค๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ๋ณดํ†ต k1์€ byte offset, v1์€ ํ…์ŠคํŠธ ์ค„(String)์ž…๋‹ˆ๋‹ค. ์ž…๋ ฅ ํฌ๋งท์€ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.



๐Ÿ”น Mapper: (k1, v1) โ†’ (k2, v2)
ํ•ต์‹ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด ๊ตฌํ˜„๋˜๋Š” ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค. ์ž…๋ ฅ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉ์ž๊ฐ€ ์ •์˜ํ•œ ๋ฐฉ์‹์œผ๋กœ (k2, v2) ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
์˜ˆ์‹œ๋ฅผ ์›Œ๋“œ ์นด์šดํŠธ๋กœ ๋“ค์–ด๋ณด๋ฉด, (0, "Hello world") โ†’ ("Hello", 1), ("world", 1) ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.



๐Ÿ”น Combiner (์„ ํƒ ์‚ฌํ•ญ): (k2, list(v2)) โ†’ (k2, v2')
๋กœ์ปฌ์—์„œ ์ค‘๋ณต๋œ key๋ฅผ ๋จผ์ € ํ•ฉ์ณ Shuffle ํŠธ๋ž˜ํ”ฝ์„ ์ค„์ด๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ์ž‘์€ ๋กœ์ปฌ reduce ์—ญํ• ์„ ํ•˜๋ฉฐ, ๊ฒฐ๊ณผ ์ •ํ™•์„ฑ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋Š” ๊ฒฝ์šฐ์—๋งŒ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
์˜ˆ์‹œ๋ฅผ ๋“ค์–ด๋ณด๋ฉด, ("word", [1,1,1]) โ†’ ("word", 3) ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.



๐Ÿ”น Partitioner: (k2, v2') โ†’ #Reducer
๊ฐ key๋ฅผ ์–ด๋–ค Reducer์— ๋ณด๋‚ผ์ง€ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์€ hash(k2) % numReducers ๋ฐฉ์‹์ด๋ฉฐ, ์‚ฌ์šฉ์ž ์ •์˜๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๋™์ผํ•œ key๋Š” ํ•ญ์ƒ ๊ฐ™์€ Reducer๋กœ ๊ฐ€์•ผ ํ•˜๋ฏ€๋กœ ์ •ํ•ฉ์„ฑ์— ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.



๐Ÿ”น Shuffle/Sort
๊ฐ Mapper์˜ ์ถœ๋ ฅ ๋ฐ์ดํ„ฐ๋ฅผ ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด Reducer๋กœ ์ „์†กํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์—์„œ key๋ณ„๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ •๋ ฌ(Sort)ํ•˜๊ณ , ๊ฐ™์€ key๋ฅผ ํ•˜๋‚˜๋กœ ๋ณ‘ํ•ฉ(Merge)ํ•ฉ๋‹ˆ๋‹ค.
MapReduce ์ „์ฒด์—์„œ ๊ฐ€์žฅ ๋งŽ์€ ํŠธ๋ž˜ํ”ฝ์ด ๋ฐœ์ƒํ•˜๋Š” ๊ตฌ๊ฐ„์ž…๋‹ˆ๋‹ค.



๐Ÿ”น Reducer: (k2, list(v2')) โ†’ (k3, v3)
์ •๋ ฌ๋˜๊ณ  ๊ทธ๋ฃนํ™”๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ ์ตœ์ข… ๊ฒฐ๊ณผ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ์ •์˜ํ•œ reduce() ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
์˜ˆ์‹œ๋ฅผ ๋“ค์–ด๋ณด๋ฉด, ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฉ๋‹ˆ๋‹ค.("Hello", [1,1,1]) โ†’ ("Hello", 3)



๐Ÿ”น Output: TextOutputFormat
์ตœ์ข… ๊ฒฐ๊ณผ๋ฅผ (k3, v3) ํ˜•์‹์œผ๋กœ ์ถœ๋ ฅ ํŒŒ์ผ์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ๋ณดํ†ต HDFS์— ํ…์ŠคํŠธ ํŒŒ์ผ ํ˜•ํƒœ๋กœ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.


๐Ÿ”ธ Combiner์™€ Partitioner๋Š” ์„ฑ๋Šฅ ์ตœ์ ํ™”์— ํฐ ์—ญํ• ์„ ํ•˜๋ฉฐ, ๋„คํŠธ์›Œํฌ ๋ณ‘๋ชฉ์„ ์ค„์ด๋Š” ๋ฐ ๋งค์šฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ˜ 3.7. Combiner ์™€ Reducer ์˜ ์ฐจ์ด


Combiner๋Š” Hadoop MapReduce์—์„œ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•˜๊ธฐ ์œ„ํ•œ ์„ ํƒ์ ์ธ ์ฒ˜๋ฆฌ ๋‹จ๊ณ„์ž…๋‹ˆ๋‹ค.
Reducer์ฒ˜๋Ÿผ ๋™์ž‘ํ•˜์ง€๋งŒ, Map Task๊ฐ€ ๋๋‚œ ํ›„ ๋กœ์ปฌ ๋…ธ๋“œ์—์„œ ์‹คํ–‰๋˜์–ด ์ค‘๊ฐ„ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ„๋žตํ™”ํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

์ฆ‰, Reduce ์ž‘์—…์„ ๋ฏธ๋ฆฌ ์ผ๋ถ€ ์ˆ˜ํ–‰ํ•จ์œผ๋กœ์จ, ์ „์ฒด์ ์ธ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๋Ÿ‰์„ ์ค„์—ฌ์ฃผ๋Š” ๋ณด์กฐ์ ์ธ ๋„๊ตฌ๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋•Œ๋ฌธ์— ์ข…์ข… โ€œ๋กœ์ปฌ Reducer(Local Reducer)โ€, โ€œ์„ธ๋ฏธ Reducer(Semi-Reducer)โ€๋ผ๊ณ ๋„ ๋ถˆ๋ฆฝ๋‹ˆ๋‹ค.

MapReduce์—์„œ ๊ฐ€์žฅ ๋ณ‘๋ชฉ(Bottleneck)์ด ์‹ฌํ•œ ๋‹จ๊ณ„๋Š” Map โ†’ Reduce ์‚ฌ์ด์˜ Shuffle ๋‹จ๊ณ„์ž…๋‹ˆ๋‹ค.

Map Task๋Š” (key, value) ์Œ๋“ค์„ ์ƒ์„ฑํ•˜๋ฉฐ, ์ด ๊ฒฐ๊ณผ๋Š” ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด Reducer๋กœ ์ „์†ก๋˜๋ฉฐ, ์ด ๊ณผ์ •์—์„œ ๋งค์šฐ ๋งŽ์€ ์–‘์˜ ๋ฐ์ดํ„ฐ ์ „์†ก์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Combiner๋Š” ์ด ์ค‘๊ฐ„ ๊ฒฐ๊ณผ๋ฅผ ๋กœ์ปฌ์—์„œ ๋จผ์ € ์ง‘๊ณ„ํ•˜์—ฌ, Shuffle ๋‹จ๊ณ„๋กœ ๋„˜์–ด๊ฐ€๋Š” ๋ฐ์ดํ„ฐ์˜ ์–‘์„ ์ค„์—ฌ์ค๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฌธ์žฅ์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ด…์‹œ๋‹ค.

Hello Hello Hello World World Bye

Combiner ์—†์ด ์ฒ˜๋ฆฌํ•  ๊ฒฝ์šฐ Map Task๋Š” ๊ฐ ๋‹จ์–ด๋ฅผ ๋งŒ๋‚˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ (๋‹จ์–ด, 1) ํ˜•์‹์˜ ์ถœ๋ ฅ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค

("Hello", 1)
("Hello", 1)
("Hello", 1)
("World", 1)
("World", 1)
("Bye", 1)

์ด ๋ชจ๋“  ๊ฐ’์€ ๊ทธ๋Œ€๋กœ Shuffle ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์ณ Reducer์—๊ฒŒ ์ „๋‹ฌ๋˜๋ฉฐ, ๋„คํŠธ์›Œํฌ๋กœ 6๊ฐœ์˜ ๋ ˆ์ฝ”๋“œ๊ฐ€ ์ „์†ก๋ฉ๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ Combiner๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ Combiner๋Š” Map Task์˜ ์ถœ๋ ฅ๊ฐ’์„ ๋ฐ›์•„ ๋กœ์ปฌ์—์„œ ๋จผ์ € ์ง‘๊ณ„๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋Ÿฌ๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•ฉ์ณ์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

("Hello", 3)
("World", 2)
("Bye", 1)

์ด์ œ Shuffle์„ ํ†ตํ•ด Reducer๋กœ ๋ณด๋‚ด์•ผ ํ•  ๋ฐ์ดํ„ฐ๋Š” ๋‹จ 3๊ฐœ์ž…๋‹ˆ๋‹ค. ๋„คํŠธ์›Œํฌ๋กœ ์ „์†ก๋˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์ ˆ๋ฐ˜์œผ๋กœ ์ค„์–ด๋“  ์…ˆ์ž…๋‹ˆ๋‹ค.

๊ทธ๋ฆผ์œผ๋กœ ๋ณด๋ฉด, ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

MapReduce
MapReduce

์ถœ์ฒ˜ : Combiner ์‚ฌ์šฉ ์ „, ํ›„ ์ด๋ฏธ์ง€


๋‹จ, Combiner ๋ฅผ ์‚ฌ์šฉ ํ•  ๋•Œ์—๋Š” ์ฃผ์˜ํ•  ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋จผ์ € Combiner๋Š” ์‹คํ–‰์ด ๋ณด์žฅ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
Hadoop์ด ๋‚ด๋ถ€์ ์œผ๋กœ ์ตœ์ ํ™” ์—ฌ๋ถ€๋ฅผ ํŒ๋‹จํ•ด์„œ ์‹คํ–‰ํ•  ์ˆ˜๋„ ์žˆ๊ณ , ํ•˜์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  Reducer์™€ ๋™์ผํ•œ ๋กœ์ง์„ ์‚ฌ์šฉํ•˜์ง€๋งŒ, ํ•ญ์ƒ ์•ˆ์ „ํ•œ ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.
Combiner๊ฐ€ ์•ˆ์ „ํ•˜๊ฒŒ ์‚ฌ์šฉ๋˜๋ ค๋ฉด ์—ฐ์‚ฐ์ด ๋‹ค์Œ ๋‘ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค

  • ๊ฒฐํ•ฉ ๋ฒ•์น™(Associative): (a + b) + c == a + (b + c)

  • ๊ตํ™˜ ๋ฒ•์น™(Commutative): a + b == b + a

์˜ˆ๋ฅผ๋“ค๋ฉด, Sum, Count, Min, Max๋Š” ์•ˆ์ „ํ•˜๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ Average, TopK, Percentile ๋“ฑ์€ ๋ถ€์ •ํ™•ํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋‚ผ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ ๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— Combiner ๋Š” ๋ฐ์ดํ„ฐ ์ค‘๋ณต์ด ๋งŽ๊ณ , ์ค‘๊ฐ„ ๊ฒฐ๊ณผ์˜ ํฌ๊ธฐ๋ฅผ ์ค„์ด๊ณ  ์‹ถ์„ ๋•Œ, ๊ทธ๋Ÿฌ๋ฉด์„œ ์—ฐ์‚ฐ์ด ๊ฒฐํ•ฉ ๊ฐ€๋Šฅํ•˜๊ณ  ๊ตํ™˜ ๊ฐ€๋Šฅํ•  ๋•Œ

์ฆ‰, Word Count, Histogram, Sum, Max/Min ๊ณ„์‚ฐ ๋“ฑ ๋ˆ„์  ํ•ฉ์‚ฐ ๋˜๋Š” ๋‹จ์ˆœ ํ†ต๊ณ„์„ฑ ์ž‘์—…์ผ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์œผ๋ฉฐ, ํ•˜๋‘ก ๋‚ด๋ถ€์ ์œผ๋กœ๋„ ๊ทธ๋ ‡๊ฒŒ ํŒ๋‹จํ•˜๊ณ  ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ˜ 3.8. MapReduce ์‹คํ–‰ ํ๋ฆ„ ๋ฐ ์ƒํƒœ ๊ฐฑ์‹ 


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

๊ฐ Task๋Š” ์›Œ์ปค ๋…ธ๋“œ์—์„œ ์‹คํ–‰๋˜๋ฉฐ, ํ•ด๋‹น ๋…ธ๋“œ์˜ TaskTracker๊ฐ€ ์ด๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์‹ค์ œ Map ๋˜๋Š” Reduce ์ž‘์—…์€ Child JVM์—์„œ ์ˆ˜ํ–‰๋˜๋ฉฐ, ์ด๋Š” ๊ฐ Task๊ฐ€ ์„œ๋กœ ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋„๋ก ํ•˜๊ธฐ ์œ„ํ•œ ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.

Task๋Š” ์‹คํ–‰ ๋„์ค‘์— ํ˜„์žฌ ์ง„ํ–‰ ์ƒํ™ฉ์ด๋‚˜ ์นด์šดํ„ฐ ๊ฐ’ ๋“ฑ์„ TaskTracker๋ฅผ ํ†ตํ•ด JobTracker์—๊ฒŒ ์ฃผ๊ธฐ์ ์œผ๋กœ ๋ณด๊ณ ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ TaskTracker๋Š” ์ผ์ •ํ•œ ์ฃผ๊ธฐ๋กœ heartbeat๋ฅผ ๋ณด๋‚ด์–ด ์ž์‹ ์˜ ์ •์ƒ ๋™์ž‘ ์—ฌ๋ถ€๋ฅผ JobTracker์—๊ฒŒ ์•Œ๋ฆฝ๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž๋Š” JobClient๋ฅผ ํ†ตํ•ด Job์˜ ์ƒํƒœ๋ฅผ ์ง€์†์ ์œผ๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, JobTracker๋Š” TaskTracker๋กœ๋ถ€ํ„ฐ ๋ฐ›์€ ์ •๋ณด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์ „์ฒด ์ž‘์—…์˜ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

๋งŒ์•ฝ Task๊ฐ€ ์‹คํ–‰ ์ค‘ ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฑฐ๋‚˜, TaskTracker๊ฐ€ ์ผ์ • ์‹œ๊ฐ„ ๋™์•ˆ heartbeat๋ฅผ ๋ณด๋‚ด์ง€ ์•Š์œผ๋ฉด, JobTracker๋Š” ํ•ด๋‹น Task๋ฅผ ์‹คํŒจ๋กœ ๊ฐ„์ฃผํ•ฉ๋‹ˆ๋‹ค. ์ดํ›„ ๋™์ผํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค๋ฅธ ๋…ธ๋“œ์— ํ•ด๋‹น Task๋ฅผ ์žฌ์‹คํ–‰ํ•˜๋„๋ก ๋ช…๋ นํ•ฉ๋‹ˆ๋‹ค.

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


๐Ÿ˜ 3.9. ๋ถ„์‚ฐ ์บ์‹ฑ


๋ถ„์‚ฐ ์บ์‹œ๋Š” ํ•˜๋‘ก ๋งต๋ฆฌ๋“€์Šค์—์„œ ๋งต(Map)๊ณผ ๋ฆฌ๋“€์Šค(Reduce) ์ž‘์—…์— ํ•„์š”ํ•œ ์ •์  ํŒŒ์ผ(์ฐธ์กฐ ๋ฐ์ดํ„ฐ, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, ์„ค์ • ํŒŒ์ผ ๋“ฑ)์„ ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด ๋ชจ๋“  ๋…ธ๋“œ์— ์ž๋™์œผ๋กœ ๋ฐฐํฌํ•˜์—ฌ, ๊ฐ ๋…ธ๋“œ์˜ ๋กœ์ปฌ ๋””์Šคํฌ์—์„œ ๋น ๋ฅด๊ฒŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.

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

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

๊ฐ TaskTracker(NodeManager) ๋…ธ๋“œ๋Š” ๋ถ„์‚ฐ ์บ์‹œ์— ๋“ฑ๋ก๋œ ํŒŒ์ผ์„ ์ž๋™์œผ๋กœ HDFS์—์„œ ๋‹ค์šด๋กœ๋“œํ•˜์—ฌ ๋กœ์ปฌ ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์ €์žฅํ•˜๋ฉฐ, ์ž‘์—… ์ค‘์ธ ํƒœ์Šคํฌ๋Š” ๋ถ„์‚ฐ ์บ์‹œ์— ๋“ฑ๋ก๋œ ํŒŒ์ผ์„ ๋กœ์ปฌ ๊ฒฝ๋กœ๋ฅผ ํ†ตํ•ด ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฆ‰, ๋ถ„์‚ฐ ์บ์‹œ์— ๋“ฑ๋ก๋œ ํŒŒ์ผ์˜ โ€˜๋ฐฐํฌ ๋ฐ ๋กœ์ปฌ ์บ์‹ฑโ€™์€ ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌ๋˜๋ฉฐ, ์ด ๋ถ€๋ถ„์„ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ๊ตฌํ˜„ํ•  ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ๋ถ„์‚ฐ ์บ์‹œ ๊ธฐ๋Šฅ์ด ์ž๋™ ๋ฐฐํฌ๋ฅผ ์ง€์›ํ•˜๋”๋ผ๋„, ๋‹ค์Œ ๋ถ€๋ถ„์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • ๋ถ„์‚ฐ ์บ์‹œ์— ์‚ฌ์šฉํ•  ํŒŒ์ผ์„ ์‚ฌ์ „์— HDFS์— ์—…๋กœ๋“œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    ๋‹น์—ฐํ•œ ์†Œ๋ฆฌ์ด๊ธด ํ•˜์ง€๋งŒ, ๋ถ„์‚ฐ ์บ์‹œ๋Š” HDFS์— ์ €์žฅ๋œ ํŒŒ์ผ์„ ํด๋Ÿฌ์Šคํ„ฐ ์ „์ฒด๋กœ ๋ฐฐํฌํ•˜๋Š” ๊ฐœ๋…์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

  • ๋งต๋ฆฌ๋“€์Šค ์ž‘์—… ์‹คํ–‰ ์‹œ ๋ถ„์‚ฐ ์บ์‹œ์— ์‚ฌ์šฉํ•  ํŒŒ์ผ์„ ๋ช…์‹œ์ ์œผ๋กœ ๋“ฑ๋กํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    ์˜ˆ๋ฅผ ๋“ค์–ด Java API์—์„œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ๋ถ„์‚ฐ ์บ์‹œ์— ํŒŒ์ผ์„ ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค.

DistributedCache.addCacheFile(new URI("/path/in/hdfs/file.txt"), job.getConfiguration());


๐Ÿ˜ 4. Map Reduce 2.0 ๋ณ€๋™์‚ฌํ•ญ


MapReduce 1.0์€ ์ผ๊ด„ ์ฒ˜๋ฆฌ(batch processing)๋งŒ์„ ์ง€์›ํ•˜๋ฉฐ, ๋ฐ์ดํ„ฐ ๊ฐ„์˜ ์ƒํ˜ธ์ž‘์šฉ์ด ์—†๋Š” ๋น„๋Œ€ํ™”ํ˜• ์ฒ˜๋ฆฌ ๋ฐฉ์‹์ด์—ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  MapReduce Job์„ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด ๋ณต์žกํ•˜๊ณ , ์ด๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์ˆ™๋ จ๋œ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ถ€์กฑํ•˜๋‹ค๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ, MapReduce Job์€ ๋‹ค์–‘ํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ์š”๊ตฌ์‚ฌํ•ญ์— ๋ถ€ํ•ฉํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์•˜๊ณ , ๊ธฐ์—…์—์„œ ํ•„์š”๋กœ ํ•˜๋Š” ๋ณด์•ˆ์„ฑ์ด๋‚˜ ๊ณ ๊ฐ€์šฉ์„ฑ(high availability) ๊ฐ™์€ ๊ธฐ๋Šฅ์ด ๋ถ€์กฑํ•˜๋‹ค๋Š” ์ ๋„ ํฐ ์ œ์•ฝ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

์ฆ‰, MapReduce 1.0์€ ๋‹จ์ˆœํ•˜๊ณ  ์ •์ ์ธ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ์—๋Š” ์ ํ•ฉํ–ˆ์ง€๋งŒ, ์œ ์—ฐํ•˜๊ณ  ๋‹ค์–‘ํ•œ ์ฒ˜๋ฆฌ ์š”๊ตฌ๋ฅผ ์ˆ˜์šฉํ•˜๊ธฐ์—๋Š” ๊ตฌ์กฐ์ ์œผ๋กœ ํ•œ๊ณ„๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ ‡์ง€๋งŒ Hadoop 2.x ๊ณผ ํ•จ๊ป˜ ๋“ค์–ด์˜จ MapReduce 2.0์€ ๊ธฐ์กด MapReduce 1.0 ๊ตฌ์กฐ์˜ ํ•œ๊ณ„๋ฅผ ๊ทน๋ณตํ•˜๊ธฐ ์œ„ํ•ด JobTracker์˜ ์—ญํ• ์„ ๋ถ„๋ฆฌํ•˜๋Š” ์•„ํ‚คํ…์ฒ˜ ๊ฐœ์„ ์„ ๋„์ž…ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

๊ธฐ์กด์—๋Š” JobTracker๊ฐ€ ์ž์›๊ด€๋ฆฌ(Resource Management)์™€ ์ž‘์—… ์Šค์ผ€์ค„๋ง, Job ์ƒ๋ช…์ฃผ๊ธฐ ๊ด€๋ฆฌ ๋“ฑ ๋ชจ๋“  ์—ญํ• ์„ ์ˆ˜ํ–‰ํ–ˆ์œผ๋‚˜, 2.0์—์„œ๋Š” ์ด๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ ์ƒˆ๋กœ์šด YARN (Yet Another Resource Negotiator) ๊ตฌ์กฐ๋ฅผ ๋„์ž…ํ–ˆ์Šต๋‹ˆ๋‹ค.

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

MapReduce 2.0์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ด์ ์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค.

  • ์ž์› ๊ด€๋ฆฌ์™€ Job ์ƒ๋ช…์ฃผ๊ธฐ ๊ด€๋ฆฌ์˜ ๋ถ„๋ฆฌ๋กœ ์ธํ•œ ๊ตฌ์กฐ์  ํšจ์œจ์„ฑ ํ–ฅ์ƒ
  • ์—ฌ๋Ÿฌ ํ˜•ํƒœ์˜ ๋ถ„์‚ฐ Job ์ƒ๋ช…์ฃผ๊ธฐ ๊ด€๋ฆฌ ์ง€์›
  • ๋‹ค์–‘ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋ ˆ์ž„์›Œํฌ ์‹คํ–‰ ๊ฐ€๋Šฅ (์˜ˆ: Spark, Tez, Flink ๋“ฑ)
  • ๋Œ€ํ™”ํ˜• ์ฒ˜๋ฆฌ ๋ฐ ์‹ค์‹œ๊ฐ„ ์ฒ˜๋ฆฌ ์ง€์›
  • MapReduce ์ฝ”๋“œ๋ฅผ ์ง์ ‘ ์ž‘์„ฑํ•˜์ง€ ์•Š์•„๋„ ๋˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  • ๋” ๋งŽ์€ ๋น„์ฆˆ๋‹ˆ์Šค ๋ชจ๋ธ์— ์ ํ•ฉ
  • ๋ณด์•ˆ์„ฑ๊ณผ ๊ณ ๊ฐ€์šฉ์„ฑ ๊ฐœ์„ 
  • ๋ถ„์‚ฐ ์บ์‹œ ๊ธฐ๋Šฅ ํ–ฅ์ƒ

ํŠนํžˆ, ๋ถ„์‚ฐ ์บ์‹œ ๊ธฐ๋Šฅ์ด ํ–ฅ์ƒ๋จ์— ๋”ฐ๋ผ, DistributedCache ๋Š” ๋”์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š๊ฒŒ ๋˜์—ˆ์œผ๋ฉฐ, ์•„๋ž˜์ฒ˜๋Ÿผ addCacheFile ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

Job job = Job.getInstance(conf, "Example Distributed Cache Job");
job.addCacheFile(new URI("/path/in/hdfs/file.txt#alias")); // alias ๋Š” ์‹ฌ๋ณผ๋ฆญ ๋งํฌ์ž…๋‹ˆ๋‹ค. ์ € alias ๋ฅผ ํ†ตํ•ด ์ถ”ํ›„ ํŒŒ์ผ์„ ์‰ฝ๊ฒŒ ์ฐพ์•„ ์ฝ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
ํ•ญ๋ชฉ MapReduce 1.0 MapReduce 2.0 (YARN ๊ธฐ๋ฐ˜)
์ฒ˜๋ฆฌ ๋ฐฉ์‹ ์ผ๊ด„ ์ฒ˜๋ฆฌ๋งŒ ์ง€์› ์ผ๊ด„ + ์‹ค์‹œ๊ฐ„ + ์ŠคํŠธ๋ฆฌ๋ฐ ๋“ฑ ๋‹ค์–‘
์‹คํ–‰ ๊ตฌ์กฐ JobTracker ๋‹จ์ผ ๊ตฌ์„ฑ ResourceManager + ApplicationMaster๋กœ ๋ถ„๋ฆฌ
ํ™•์žฅ์„ฑ ๋‚ฎ์Œ ๋†’์Œ
์œ ์—ฐ์„ฑ ์ •์  ๋™์ , ๋‹ค์–‘ํ•œ ํ”„๋ ˆ์ž„์›Œํฌ ์ง€์›
๋ณด์•ˆ / ๊ฐ€์šฉ์„ฑ ๋ถ€์กฑํ•จ ๋ณด์•ˆ์„ฑ๊ณผ ๊ณ ๊ฐ€์šฉ์„ฑ ๊ฐ•ํ™”
์ง€์› ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ MapReduce๋งŒ ์ง€์› Spark, Tez, Flink ๋“ฑ ๋‹ค์–‘ํ•œ ์—”์ง„ ์ง€์›
Job ์ž‘์„ฑ ๋ณต์žกํ•œ MapReduce ์ฝ”๋“œ ํ•„์š” ๋‹ค์–‘ํ•œ API ์‚ฌ์šฉ ๊ฐ€๋Šฅ (Java, SQL, Scala ๋“ฑ)
๊ธฐ์—… ์ ์šฉ์„ฑ ๋‚ฎ์Œ ๋‹ค์–‘ํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ๋ชจ๋ธ์— ์ ์šฉ ๊ฐ€๋Šฅ

MapReduce 1.0์€ ๋‹จ์ผ JobTracker ๊ตฌ์กฐ๋กœ ์ธํ•ด ์ฒ˜๋ฆฌ ์œ ํ˜•, ํ™•์žฅ์„ฑ, ์œ ์—ฐ์„ฑ์—์„œ ํ•œ๊ณ„๊ฐ€ ์žˆ์—ˆ์œผ๋ฉฐ, ๋‹ค์–‘ํ•œ ๊ธฐ์—… ์š”๊ตฌ์‚ฌํ•ญ์„ ์ถฉ์กฑํ•˜๊ธฐ ์–ด๋ ค์› ์Šต๋‹ˆ๋‹ค.
๋ฐ˜๋ฉด MapReduce 2.0์€ YARN ๊ธฐ๋ฐ˜์œผ๋กœ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ฐœ์„ ํ•˜์—ฌ ์ž์› ๊ด€๋ฆฌ์™€ Job ๊ด€๋ฆฌ ๊ธฐ๋Šฅ์„ ๋ถ„๋ฆฌํ•˜๊ณ , ๋‹ค์–‘ํ•œ ์ฒ˜๋ฆฌ ๋ฐฉ์‹๊ณผ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์ง€์›ํ•จ์œผ๋กœ์จ ๋ณด๋‹ค ํ™•์žฅ ๊ฐ€๋Šฅํ•˜๊ณ  ์œ ์—ฐํ•œ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ํ”Œ๋žซํผ์œผ๋กœ ๋ฐœ์ „ํ•˜์˜€์Šต๋‹ˆ๋‹ค.


๐Ÿ˜ 5. Map Reduce ๊ธฐ๋Šฅ๊ณผ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์‹ค์Šต



๐Ÿ˜ 6. Map Reduce ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ํ•œ๊ณ„

๐Ÿ˜ 6.1 ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆผ


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

๐Ÿ˜ 6.2 ๋ฐ์ดํ„ฐ ๋ชจ๋ธ๊ณผ ์Šคํ‚ค๋งˆ์˜ ๋ถ€์žฌ


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

๐Ÿ˜ 6.3 ๊ณ ์ •๋œ ๋ฐ์ดํ„ฐ ํ๋ฆ„


MapReduce ์ž‘์—…์€ ๊ธฐ๋ณธ์ ์œผ๋กœ Map ๋‹จ๊ณ„์™€ Reduce ๋‹จ๊ณ„๋ผ๋Š” ๊ณ ์ •๋œ ๋‘ ๋‹จ๊ณ„์˜ ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด, โ€œ๋‹จ์–ด ์ˆ˜ ์„ธ๊ธฐโ€ ๊ฐ™์€ ์ž‘์—…์€ ์ž…๋ ฅ ๋ฐ์ดํ„ฐ๋ฅผ Map์—์„œ ํ‚ค-๊ฐ’ ์Œ์œผ๋กœ ๋ณ€ํ™˜ํ•˜๊ณ , Reduce์—์„œ ์ง‘๊ณ„ํ•˜๋Š” ๊ตฌ์กฐ๋กœ ๋งค์šฐ ๋ช…ํ™•ํ•ฉ๋‹ˆ๋‹ค.
ํ•˜์ง€๋งŒ ๋” ๋ณต์žกํ•œ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ๋กœ์ง์ด๋‚˜ ์—ฌ๋Ÿฌ ๋‹จ๊ณ„๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ, ์—ฌ๋Ÿฌ MapReduce ์ž‘์—…์„ ์ฒด์ธ์ฒ˜๋Ÿผ ์—ฐ๊ฒฐํ•ด์•ผ ํ•˜๋ฉฐ, ๊ฐ ์ž‘์—…๋งˆ๋‹ค ์ปดํŒŒ์ผ๊ณผ ์‹คํ–‰ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์ด๋Š” ๊ฐœ๋ฐœ๊ณผ ํ…Œ์ŠคํŠธ ์‚ฌ์ดํด์ด ๊ธธ์–ด์ง€๊ณ , ๋น ๋ฅด๊ฒŒ ์•„์ด๋””์–ด๋ฅผ ๊ฒ€์ฆํ•˜๊ธฐ ์–ด๋ ต๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
๋˜ํ•œ, MapReduce ์ž์ฒด๋Š” ๋™์  ๋ฐ์ดํ„ฐ ํ๋ฆ„์ด๋‚˜ ๋ถ„๊ธฐ ์ฒ˜๋ฆฌ์™€ ๊ฐ™์€ ์œ ์—ฐํ•œ ์ž‘์—… ํ๋ฆ„์„ ์ง€์›ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ, ๋ณต์žกํ•œ ์›Œํฌํ”Œ๋กœ์šฐ ๊ตฌํ˜„์—๋Š” ํ•œ๊ณ„๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ˜ 6.4 ๋‚ฎ์€ ํšจ์œจ์„ฑ๊ณผ ๋А๋ฆฐ ์†๋„


MapReduce๋Š” ์žฅ์•  ํ—ˆ์šฉ(fault tolerance)๊ณผ ํ™•์žฅ์„ฑ(scalability)์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ์ค‘๊ฐ„ ๊ฒฐ๊ณผ๋ฅผ HDFS์— ์ €์žฅํ•˜๋Š” ์ฒดํฌํฌ์ธํŠธ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด, Map ์ž‘์—…์ด ๋๋‚œ ํ›„ ๊ฒฐ๊ณผ๋ฅผ ๋””์Šคํฌ์— ์ €์žฅํ•˜๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ Reduce ์ž‘์—…์ด ์ฝ์–ด ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
์ด ๋•Œ๋ฌธ์— ๋„คํŠธ์›Œํฌ์™€ ๋””์Šคํฌ ์ž…์ถœ๋ ฅ์ด ๋งŽ์•„์ง€๊ณ , ์ „์ฒด ์ž‘์—… ์†๋„๊ฐ€ ๋А๋ ค์ง‘๋‹ˆ๋‹ค.
๋˜ํ•œ, ๋ฐ์ดํ„ฐ ๊ทธ๋ฃนํ•‘์„ ์œ„ํ•ด ์™ธ๋ถ€ ์ •๋ ฌ๊ณผ ๋ณ‘ํ•ฉ ๊ณผ์ •์„ ๊ฑฐ์น˜๋Š”๋ฐ, ์ด ๊ณผ์ • ์—ญ์‹œ ๋งŽ์€ ์ž์›์„ ์†Œ๋ชจํ•ฉ๋‹ˆ๋‹ค.
๋•Œ๋ฌธ์— ๋…ผ๋ฆฌ์ ์œผ๋กœ ๋ณ‘๋ ฌ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์ž‘์—…๋„ ์™ธ๋ถ€ ์ •๋ ฌ ๋“ฑ์œผ๋กœ ์ธํ•ด ์ˆœ์ฐจ์ ์ธ ๋‹จ๊ณ„๊ฐ€ ์ƒ๊ฒจ ์ „์ฒด ์ฒ˜๋ฆฌ ์†๋„๊ฐ€ ์ œํ•œ๋ฉ๋‹ˆ๋‹ค.
๋ณต์žกํ•œ ์ž‘์—…์ด๋‚˜ ๊ธด ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ํ๋ฆ„์—์„œ๋Š” ์ด๋Ÿฐ ๋น„ํšจ์œจ์„ฑ์ด ํฌ๊ฒŒ ๋ˆ„์ ๋˜์–ด, ์ตœ์‹  ๋ถ„์‚ฐ ์ฒ˜๋ฆฌ ์‹œ์Šคํ…œ๋“ค์ด MapReduce ๋Œ€์‹  DAG ๊ธฐ๋ฐ˜์˜ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๊ฐ€ ๋˜๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค. ( Hive ์˜ Tez ๋„ DAG ๊ธฐ๋ฐ˜์ž…๋‹ˆ๋‹ค. )

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




โ—ˆ


โœ๏ธ ๊ฒฐ๋ก 


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

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

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




โ—ˆ


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


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

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

๐Ÿ“‘ 3. Apache Hadoop ๊ณต์‹ Docs

๐Ÿ“‘ 4. Hadoop MapReduce Combiner ์•Œ์•„๋ณด๊ธฐ

๐Ÿ“‘ 5. MapReduce 2.0 ๋“ฑ์žฅ ๋ฐฐ๊ฒฝ, ํŠน์ง•

๐Ÿ“‘ 6. MapReduce ์˜ ์ดํ•ด