์ ๋ฒ ํฌ์คํ
์์๋, 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 ๋ชจ๋ธ์ ์ฌ์ฉํ๋ฉฐ, ๋ค์๊ณผ ๊ฐ์ ์ฃผ์ ์ปดํฌ๋ํธ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
-
JobTracker (1๊ฐ):
ํด๋ฌ์คํฐ ์ ์ฒด์์ Job์ ์คํ์ ์ด๊ดํ๋ ๋ง์คํฐ ์ญํ ์ ํฉ๋๋ค.
ํด๋ผ์ด์ธํธ๋ก๋ถํฐ Job์ ๋ฐ์ Task๋ก ๋๋๊ณ , ์ ์ ํ TaskTracker์๊ฒ ๋ถ๋ฐฐํฉ๋๋ค. -
TaskTracker (์ฌ๋ฌ ๊ฐ):
๊ฐ๊ฐ์ ๋ ธ๋์ ์กด์ฌํ๋ฉฐ, JobTracker๋ก๋ถํฐ Task๋ฅผ ํ ๋น๋ฐ์ ์ค์ ๋ก Map ๋๋ Reduce ์์ ์ ์ํํฉ๋๋ค. -
Client:
์ฌ์ฉ์๊ฐ ์ง์ ์์ฑํ MapReduce Job์ hadoop jar ๋ช ๋ น์ด๋ก ์คํํ๋ฉด, ์ด Job์ ์ ์ถํ๋ ์ฃผ์ฒด๊ฐ ๋ฉ๋๋ค. -
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 ๊ตฌ๋ ์ ์ฐจ
์ถ์ฒ : Map Reduce 1.0 ์์ธ ๊ตฌ๋ ์ ์ฐจ
-
์ฌ์ฉ์ ์ ํ๋ฆฌ์ผ์ด์ ์คํ
์ฌ์ฉ์๊ฐ ํด๋ผ์ด์ธํธ์์ MapReduce ํ๋ก๊ทธ๋จ์ ์คํํ๋ฉด, ๋ด๋ถ์ ์ผ๋กJobClient
๊ฐ ์์ฑ๋๊ณ ์คํ๋ฉ๋๋ค. -
Job ID ๋ฐ๊ธ ์์ฒญ
JobClient๋ ํด๋ฌ์คํฐ์ JobTracker์ ์ฐ๊ฒฐํ์ฌ ์๋ก์ด Job ID๋ฅผ ์์ฒญํฉ๋๋ค. -
Job ๋ฆฌ์์ค HDFS ์ ๋ก๋
์คํ์ ํ์ํ ์ฝ๋, ์ค์ ํ์ผ, ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฑ์ HDFS์ ์ ๋ก๋ํฉ๋๋ค. -
JobTracker์ Job ์ ์ถ
JobClient๋ JobTracker์๊ฒ Job์ ์ ์ถํ๋ฉฐ, ์ดํ ์์ ์ค์ผ์ค๋ง์ JobTracker๊ฐ ๊ด๋ฆฌํฉ๋๋ค. -
Job ์ด๊ธฐํ
JobTracker๋ ์ ์ถ๋ Job์ ๋ํ ์ด๊ธฐํ ์์ ์ ์ํํฉ๋๋ค (๋ฉํ์ ๋ณด ๊ตฌ์ฑ, ๋๋ ํฐ๋ฆฌ ์์ฑ ๋ฑ). -
InputSplit ๊ฒ์
HDFS์์ ์ ๋ ฅ ๋ฐ์ดํฐ๋ฅผ ๋ธ๋ก ๋จ์๋ก ๋๋ ํ, ๊ฐ ๋ธ๋ก์ ์์น ์ ๋ณด๋ฅผ ๊ธฐ์ค์ผ๋กInputSplit
์ ๊ตฌ์ฑํฉ๋๋ค.
InputSplits ๋, ๋ฌผ๋ฆฌ์ Block ๋ค์ ๋ ผ๋ฆฌ์ ์ผ๋ก ๊ทธ๋ฃจํ ํ ๊ฐ๋ ์ด๋ผ๊ณ ๋ณผ ์ ์์ต๋๋ค.
InputSplit ์ Mapper ์ ์ ๋ ฅ ๋ฐ์ดํฐ๋ฅผ ๋ถํ ํ๋ ๋ฐฉ์์ ์ ๊ณตํ๊ธฐ ์ํด, ๋ฐ์ดํฐ ์์น์ ์ฝ์ด ๋ค์ด๋ ๊ธธ์ด๋ฅผ ์ ์ํฉ๋๋ค. -
Task ํ ๋น ์์ฒญ (Heartbeat)
TaskTracker๋ ์ฃผ๊ธฐ์ ์ผ๋ก JobTracker์ ํํธ๋นํธ๋ฅผ ๋ณด๋ด๋ฉฐ, ์คํ ๊ฐ๋ฅํ Task๊ฐ ์๋์ง ํ์ธํฉ๋๋ค. -
Job ๋ฆฌ์์ค ๋ก์ปฌ ๋ณต์ฌ
Task๊ฐ ํ ๋น๋๋ฉด, TaskTracker๋ HDFS์์ ํ์ํ Job ๋ฆฌ์์ค๋ฅผ ์์ ์ ๋ก์ปฌ ๋๋ ํฐ๋ฆฌ๋ก ๋ณต์ฌํฉ๋๋ค. -
Child JVM ์คํ
TaskTracker๋ ์์ JVM ํ๋ก์ธ์ค๋ฅผ ์์ฑํ์ฌ, Map ๋๋ Reduce Task๋ฅผ ์คํํ ์ค๋น๋ฅผ ํฉ๋๋ค. -
Map ๋๋ Reduce Task ์คํ
ํ ๋น๋ฐ์ Task๋ฅผ ์คํํ์ฌ ์ค์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ(Map ๋๋ Reduce ๋ก์ง)๋ฅผ ์ํํฉ๋๋ค.
๐ฌ ์ฐธ๊ณ : ์ ์ ์ฐจ๋ Hadoop 1.x (MapReduce v1) ๊ธฐ์ค์ ๋๋ค.
Hadoop 2.x ์ด์์์๋ YARN์ด ๋์ ๋๋ฉฐ JobTracker/TaskTracker๊ฐ ResourceManager/NodeManager๋ก ๋์ฒด๋ฉ๋๋ค.
๐ 3.4. MapReduce ๋์ ๊ณผ์
MapReduce ๋ ๋ค์ 6๊ฐ์ง ๋์ ๊ณผ์ ์ ๊ฐ์ง๋๋ค.
- ์
๋ ฅ ๋ฐ์ดํฐ ๋ถํ (Input Splitting)
- ๋์ฉ๋ ์ ๋ ฅ ํ์ผ์ ์ฌ๋ฌ ๊ฐ์ Input Split์ผ๋ก ๋๋๋๋ค.
- ๊ฐ Split์ ๋ณ๋ ฌ๋ก ์ฒ๋ฆฌํ ์ ์๋ ์ต์ ๋จ์์ ๋๋ค.
- ๋ณดํต HDFS ๋ธ๋ก ํฌ๊ธฐ(์: 128MB)๋ฅผ ๊ธฐ์ค์ผ๋ก ๋๋ฉ๋๋ค.
- ๋งต(Map) ๋จ๊ณ
- ๊ฐ Input Split์ ๋ํด Map ํจ์๊ฐ ๋ณ๋ ฌ๋ก ์คํ๋ฉ๋๋ค.
- Map ํจ์๋ ์ ๋ ฅ ๋ฐ์ดํฐ๋ฅผ ํค-๊ฐ ์ (key-value pair)์ผ๋ก ๋ณํํฉ๋๋ค.
- ์๋ฅผ ๋ค์ด, ํ
์คํธ ํ์ผ์ ์ค ๋จ์๋ก ์ฝ์ด ๋จ์ด๋ณ๋ก
(๋จ์ด, 1)
์์ ๋ง๋ญ๋๋ค. - Map ํจ์ ๊ฒฐ๊ณผ๋ ๋ฉ๋ชจ๋ฆฌ ๋ฒํผ์ ์์ ์ ์ฅ๋ฉ๋๋ค.
- ์ค๊ฐ ์ ๋ ฌ ๋ฐ ๋ณํฉ (Sort and Merge)
- Map ์ถ๋ ฅ ๊ฒฐ๊ณผ๋ ๋ด๋ถ์์ ํค๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌ๋ฉ๋๋ค.
- ์ ๋ ฌ๋ ๊ฒฐ๊ณผ๋ ๋์คํฌ์ ์์ ์ ์ฅ๋๋ฉฐ, ์ฌ๋ฌ Map ๊ฒฐ๊ณผ๋ฅผ ๋ณํฉ(merge)ํฉ๋๋ค.
- ์ด ๋จ๊ณ๋ ํ์ ์์ ์ธ Shuffle์ ์ํํ๊ฒ ๋ง๋ญ๋๋ค.
- ์
ํ(Shuffle)
- ๊ฐ Mapper์์ ์ ๋ ฌ๋ ๋ฐ์ดํฐ๋ฅผ Reducer๋ก ์ ์กํฉ๋๋ค.
- ๋์ผํ ํค๋ฅผ ๊ฐ์ง ๋ชจ๋ ๊ฐ์ด ํ๋์ Reducer์ ๋ชจ์ด๋๋ก ๋ฐ์ดํฐ๋ฅผ ๋คํธ์ํฌ๋ก ์ด๋์ํต๋๋ค.
- ์ด ๊ณผ์ ์ Map๊ณผ Reduce ์์ ์ ์ค๊ฐ ๋จ๊ณ๋ก ๋คํธ์ํฌ I/O๋ฅผ ๋ง์ด ๋ฐ์์ํต๋๋ค.
- ๋ฆฌ๋์ค(Reduce) ๋จ๊ณ
- Reducer๋ ์ ๋ฌ๋ฐ์ ํค๋ณ๋ก ๊ทธ๋ฃนํ๋ ๊ฐ์ ์ ๋ ฅ๋ฐ์ ์ง๊ณ ์ฐ์ฐ์ ์ํํฉ๋๋ค.
- ์๋ฅผ ๋ค์ด,
(๋จ์ด, [1,1,1,...])
๊ฐ์ ๋ฐ์ ๋จ์ด ๋ฑ์ฅ ํ์๋ฅผ ํฉ์ฐํฉ๋๋ค. - Reduce ํจ์ ๊ฒฐ๊ณผ๋ ์ต์ข ์ถ๋ ฅ(key-value ์)์ผ๋ก ์์ฑ๋ฉ๋๋ค.
- ๊ฒฐ๊ณผ ์ ์ฅ (Output)
- Reduce ์์ ์ ๊ฒฐ๊ณผ๋ HDFS ๊ฐ์ ๋ถ์ฐ ํ์ผ ์์คํ ์ ์ ์ฅ๋ฉ๋๋ค.
- ์ถ๋ ฅ ํ์ผ์ ์ฌ๋ฌ ํํฐ์ ์ผ๋ก ๋๋์ด ์ ์ฅ๋ ์ ์์ต๋๋ค.
์์ฝํด๋ณด๋ฉด, ์๋ ํ์ฒ๋ผ ๋ณผ ์ ์๊ฒ ์ต๋๋ค.
๋จ๊ณ | ์ค๋ช |
---|---|
1. ์ ๋ ฅ ๋ถํ | ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฌ Split์ผ๋ก ๋๋ |
2. ๋งต(Map) | ๊ฐ Split์ ๋ํด Map ํจ์ ์คํ |
3. ์ ๋ ฌ ๋ฐ ๋ณํฉ | Map ๊ฒฐ๊ณผ๋ฅผ ํค๋ณ๋ก ์ ๋ ฌ, ๋ณํฉ |
4. ์ ํ(Shuffle) | ํค๋ณ๋ก ๋ฐ์ดํฐ๋ฅผ Reducer์ ์ ์ก |
5. ๋ฆฌ๋์ค(Reduce) | ํค๋ณ๋ก ์ง๊ณ ์์ ์ํ |
6. ์ถ๋ ฅ ์ ์ฅ | ์ต์ข ๊ฒฐ๊ณผ๋ฅผ ๋ถ์ฐ ํ์ผ ์์คํ ์ ์ ์ฅ |
๐ 3.5. MapReduce ์์
์ถ์ฒ : Map Reduce ์์
-
์ ๋ ฅ ๋ฐ์ดํฐ ๋ถํ (Input Splitting)
100GB์ง๋ฆฌ ํ ์คํธ ํ์ผ์ด ์๋ค๊ณ ํฉ์๋ค. ์ด ํ์ผ์ HDFS์ ์ ์ฅ๋๊ณ , 128MB ํฌ๊ธฐ ๋จ์๋ก ์ชผ๊ฐ์ง๋๋ค.
๊ฐ 128MB ์กฐ๊ฐ ํ๋๊ฐ ํ๋์ Input Split์ด ๋ฉ๋๋ค. -
๋งต(Map) ๋จ๊ณ
๊ฐ Input Split์ ๋ณ๋์ Map Task์ ํ ๋น๋์ด ๋ณ๋ ฌ๋ก ์ฒ๋ฆฌ๋ฉ๋๋ค.
Map ํจ์๋ ํ ์คํธ๋ฅผ ์ค ๋จ์๋ก ์ฝ๊ณ , ๊ฐ ์ค์์ ๋จ์ด๋ฅผ ๋ถ๋ฆฌํด(๋จ์ด, 1)
์์ ์์ฑํฉ๋๋ค.
์๋ฅผ ๋ค์ด, ํ ์ค์ โAndy and Bobโ์ด ์์ผ๋ฉด(Andy, 1)
,(and, 1)
,(Bob, 1)
์ด๋ฐ ์์ ๋๋ค.
์ด๋ ๊ฒ ๋ชจ๋ ๋จ์ด์ ๋ํด 1์ฉ ๋ถ์ฌ์ ์ค๊ฐ ๊ฒฐ๊ณผ๋ฅผ ๋ง๋ญ๋๋ค. -
์ค๊ฐ ์ ๋ ฌ ๋ฐ ๋ณํฉ (Sort & Merge)
๊ฐ Map Task๊ฐ ๋ง๋(๋จ์ด, 1)
์๋ค์ ํค(๋จ์ด) ๊ธฐ์ค์ผ๋ก ๋ด๋ถ ์ ๋ ฌ๋ฉ๋๋ค.
๋ฉ๋ชจ๋ฆฌ ๋ฒํผ๊ฐ ์ฐจ๋ฉด ๋์คํฌ์ spill ํ์ฌ ์์ ์ ์ฅ๋๊ณ , ์ฌ๋ฌ ๋ฒ spill๋ ๋ฐ์ดํฐ๋ ํ๋๋ก ๋ณํฉ๋ฉ๋๋ค.
์ด ๊ณผ์ ๋๋ถ์ ํ์ ์์ ์ธ Shuffle์ด ํจ์จ์ ์ผ๋ก ์งํ๋ฉ๋๋ค. -
์ ํ(Shuffle)
๊ฐ Map Task๊ฐ ์ ๋ ฌํ ๋จ์ด๋ณ ๋ฐ์ดํฐ๋ฅผ, ๋์ผํ ๋จ์ด๋ฅผ ์ฒ๋ฆฌํ Reduce Task๋ก ๋คํธ์ํฌ๋ฅผ ํตํด ์ ์กํฉ๋๋ค.
์ฆ, โAndyโ์ ํด๋นํ๋ ๋ชจ๋(Andy, 1)
๋ฐ์ดํฐ๋ ํน์ Reduce Task๋ก ๋ชจ์ ๋๋ค.
์ด ๋จ๊ณ๋ Map๊ณผ Reduce ์ฌ์ด์์ ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ถ๋ฐฐํ๋ ์ค์ํ ๊ณผ์ ์ ๋๋ค. -
๋ฆฌ๋์ค(Reduce) ๋จ๊ณ
Reduce Task๋ ํ ๋จ์ด์ ๋ํ ๋ชจ๋ 1๋ค์ ๋ฆฌ์คํธ๋ฅผ ์ ๋ฌ๋ฐ์ ํฉ๊ณ๋ฅผ ๊ณ์ฐํฉ๋๋ค.
์๋ฅผ ๋ค์ด,(Andy, [1, 1, 1, 1])
์ด๋ฉด ์ต์ข ์ ์ผ๋ก(Andy, 4)
๊ฐ ๋ฉ๋๋ค.
์ด ๊ณ์ฐ์ ๋ชจ๋ ๋จ์ด์ ๋ํด ์ํํฉ๋๋ค. -
๊ฒฐ๊ณผ ์ ์ฅ (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๊ฐ์ ๋๋ค. ๋คํธ์ํฌ๋ก ์ ์ก๋๋ ๋ฐ์ดํฐ๊ฐ ์ ๋ฐ์ผ๋ก ์ค์ด๋ ์ ์ ๋๋ค.
๊ทธ๋ฆผ์ผ๋ก ๋ณด๋ฉด, ์๋์ ๊ฐ์ต๋๋ค.
์ถ์ฒ : 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์์ ๋ฐฐ์ด ๊ธฐ๋ณธ ์๋ฆฌ์ ์ค๊ณ ์ฒ ํ์ ๋ฐํ์ผ๋ก ๋์ฑ ๊น์ด ์๋ ์ดํด์ ์์ฉ์ด ๊ฐ๋ฅํ ๊ฒ์ด๋ผ๋ ์์ ๊ฐ์ ์ป์์ต๋๋ค. ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์์คํ ์ ์ค๊ณํ๊ฑฐ๋ ์ต์ ํํ ๋ ์ด ๋ชจ๋ธ์ด ๊ฐ์ง ๊ฐ์ ๊ณผ ํ๊ณ๋ฅผ ๋ชจ๋ ๊ณ ๋ คํ๋ ๊ท ํ ์กํ ์๊ฐ์ด ํ์ํ๋ค๋ ์ ๋ ๋ค์ ํ ๋ฒ ๋ง์์ ์๊ฒผ์ต๋๋ค.
๐ ๊ณต๋ถ ์ฐธ๊ณ ์๋ฃ
๐ 2. OREILLY ํ๋ก ์๋ฒฝ ๊ฐ์ด๋ 4ํ
๐ 3. Apache Hadoop ๊ณต์ Docs
๐ 4. Hadoop MapReduce Combiner ์์๋ณด๊ธฐ