[Hadoop Study] vol 3. ๋งต๋ฆฌ๋์ค(MapReduce) ๊ฐ๋ ๊ณผ ๊ตฌ์กฐ
Hadoop Study ์ด์ ๊ธ
2020/11/12 - [Data Science/Hadoop] - [Hadoop Study] vol 1. Hadoop์ด๋?
๋ค์ด๊ฐ๋ฉฐ
์ ๋ฒ ํฌ์คํ ์์ ์์๋ดค๋ HDFS๋ ๋ฐ์ดํฐ๋ฅผ ๋ถ์ฐ ์ ์ฅํ๋ ๋ฐฉ์์ด์์ต๋๋ค. ๊ทธ๋ฌ๋ฉด ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ๋ถ์ฐ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ๋ ์์๋ด์ผ๊ฒ ์ฃ ? ๊ทธ ๋ฐฉ๋ฒ์ด ๋ฐ๋ก MapReduce์ ๋๋ค. Google์ด MapReduce ๋ ผ๋ฌธ์ ๋ฐํํ๊ณ ๊ทธ ๊ฐ๋ ์ ๊ตฌํํ์ฌ ์คํ์์คํํ ๊ฒ์ด ํ๋ก์ ๋๋ค. ์ต๊ทผ ๋งต๋ฆฌ๋์ค๋ณด๋ค ์ฑ๋ฅ์ด ๋ฐ์ด๋ ์คํํฌ๋ ๋น ์ฟผ๋ฆฌ ๋ฑ์ ์๋ฆฌ๋ฅผ ๋ง์ด ๋ด์ฃผ์์ต๋๋ค. ํ์ง๋ง ์ฌ์ ํ ๋น ๋ฐ์ดํฐ ๋ฐฐ์น ์ฒ๋ฆฌ์ ๋ง์ด ์ฌ์ฉ๋๊ณ ๊ทผ๊ฐ์ด ๋๋ ๊ฐ๋ ์ด๊ธฐ ๋๋ฌธ์ ์์๋ ๊ฐ์น๊ฐ ์ถฉ๋ถํฉ๋๋ค.
๋งต๋ฆฌ๋์ค๋ฅผ ๊ฐ๋จํ ๋งํ๋ฉด 1) ํฐ ๋ฉ์ด๋ฆฌ๋ฅผ ์๊ฒ ๋๋์ด์ 2) ์ฌ๋ฌ ๋ช ์ ์ฌ๋์ด ๊ฐ๊ฐ ์ฒ๋ฆฌํ ํ, 3) ์ฒ๋ฆฌ๋ ๊ฒ์ ๋ชจ์์ ๊ฒฐ๊ณผ๋ฌผ์ ๋ด๋ ๋ฐฉ์์ ๋๋ค. ์ฌ์ค ์์ฃผ ๊ฐ๋จํ ๊ฐ๋ ์ด์ง๋ง ๋ฐ์ดํฐ ๊ฐ๋ ์ ๋ฐ๋ก ์ ์ฉํ์ฌ ์๋ฟ์ง ์๋ ๋ถ๋ค์ ์ํด ์ด์ผ๊ธฐ๋ฅผ ํ๋ ๊ฐ์ ธ์์ต๋๋ค.
์ด๋ ๋ง์๊พผ ๋ถ์ ์ด์ผ๊ธฐ
์ฌ๋ฌ๋ถ์ด ์กฐ์ ์๋ ์ด๋ ๋ง์๊พผ ๋ถ์์ง ์ผ๊พผ์ด๋ผ๊ณ ํฉ์๋ค. ํ๋ฃจ๋ ์ฃผ์ธ ์๋ฐ์ด ์ด๋ฐ ์ง์๋ฅผ ๋ด๋ฆฝ๋๋ค. "์ด๋ณด๊ฒ, ์ด ์ ํ๊ทธ๋ฆ์ ๋ชจ๋๊ฐ ๋ค์ด๊ฐ๋ค. ๋ชจ๋๋ฅผ ๋ค ๊ณจ๋ผ๋ด๊ฒ!"
์ด๋ป๊ฒ ํ์๊ฒ ์ต๋๊น? ํ๊ทธ๋ฆ ๋ถ๋์ ์์ ๋์ถฉ 2000 ์๊ฐฑ์ด ์ ๋ ๋๋ค๊ณ ํฉ๋๋ค.์ฐธ๊ณ ์ฌ๋ฌ๋ถ์ ๋งค์ด ํ์์ฉ ์ฌ์ง์๊ณ ์ด์ฌํ ์์๊ฐฑ์ด์ ๋ชจ๋๋ฅผ ๊ณจ๋ผ๋์ต๋๋ค. ๊ทธ๋์ 30์ฌ๋ถ์ด ์ง๋์ '์ฃผ์ธ๋ ๋ค ๋์์ต๋๋ค!' ํ๊ณ ๋ณด๊ณ ํ ์ ์๊ฒ ๋์์ต๋๋ค.
๊ทธ๋ฌ๋๋, ์ฃผ์ธ ์๋ฐ ์, "์์ด๊ตฌ ์ฐธ ์ํ๋ค. ๊ทธ๋ฐ๋ฐ ๋ณด๋ ์ด ์์ ํผ๋ธ ์ ๊ฐ๋ง๋ ์์ ์จํต ์ด๋ ๊ฒ ๋ชจ๋๊ฐ ๋ค์ด๊ฐ ์์ง ๋ญ๊ฐ, ์ด๋ณด๊ฒ, ์ด๊ฑฐ ์ ๋ถ๋ค ์ข ๊ณจ๋ผ๋ด ์ฃผ๊ฒ. ์ด๊ฑฐ ๋ค ๊ณจ๋ผ๋ด์ง ์์ผ๋ฉด ์ค๋ ๋ฐฅ์ ์๋ค."
ํฐ์ผ๋ฌ์ต๋๋ค. ์ ํ๊ฐ๋ง๋๋ ๋๋ต 4000๊ทธ๋ฆ์ด๋ผ๊ณ ํฉ๋๋ค. ์๊น ๋ฐฉ๋ฒ์ผ๋ก ๋ชจ๋๋ฅผ ๊ณจ๋ผ๋๋ค๊ฐ๋… ๋๋ต 2400์๊ฐ, ๋ฑ 100์ผ ๋์ ๋ฐฅ์ ๋ชป๋จน๊ฒ ๊ตฐ์.
์ด ์์์ ๋ค์ ๋๋ค์ ์น๊ตฌ 100๋ช ์ด ๋ชฐ๋ ค๋ค์์ต๋๋ค. ์ด ์ฐฉํ๊ณ ์ฑ์คํ ์น๊ตฌ๋ค์ ํ๋ฃจ์ข ์ผ ์ฌ์ง๋ ์๊ณ ์ด์ฌํ ์ฌ๋ฌ๋ถ๊ณผ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ๋ชจ๋๋ฅผ ๊ณจ๋ผ์ ๊นจ๋ํ ์์๋ง์ ์ถ๋ ค ๋ชจ์ ๋ค์ ๊นจ๋ํ ์ ํ๊ฐ๋ง๋๋ฅผ ๋ง๋ค์ด ๋์ต๋๋ค. ์ด๋ ๊ฒ ๋งต๋ฆฌ๋์ค ๋ง์์ ์น๊ตฌ๋ค์ ๋ฉ์ง ๋ถ์ฐ์ฒ๋ฆฌ๋ฅผ ํตํด ์ฌ๋ฌ๋ถ์ ์๊ธฐ์์ ๊ตฌํด๋ผ ์ ์์์ต๋๋ค. ๊ทธ๋ค์ด ์ด ๋ฐฉ๋ฒ์ ๋ฐ๋ก,
- 1) ํ๊ฐ๋ง๋์ ์์ 100๋ฑ๋ถ์ผ๋ก ์๊ฒ ๋๋์ด์
- 2) ํ๋ช ๋น ๊ทธ 1/100์ ๊ฐ์ ธ๊ฐ ๊ฐ๊ฐ ์ฒ๋ฆฌ(ํ์์ฉ ๊ณจ๋ผ๋ด๊ธฐ)๋ฅผ ์ด์ฌํ ํ ํ์
- 3) ๊ฐ์๊ฐ ๋ถ๋ฆฌํด ๋ธ ๊นจ๋ํ ์์ ํ๋ฐ ๋ชจ์ ๋ค์ ํ๊ฐ๋ง๋๋ฅผ ๋ง๋ค์ด ๋์ต๋๋ค.
๊ทธ๋ฌ๋ฉด ์ง๊ธ๋ถํฐ ๋งต๋ฆฌ๋์ค์ ํต์ฌ ๊ฐ๋ ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
MapReduce ํต์ฌ ๊ฐ๋
๋งต๋ฆฌ๋์ค๋ ํฌ๊ฒ map๊ณผ reduce ์์ ์ผ๋ก ๋๋ ์ ์์ต๋๋ค. map์ ์ ์ฒด ๋ฐ์ดํฐ๋ฅผ ์์ ๋จ์๋ก ๋๋ ์ฒญํฌ์ ๋ํด ์ํํ ๋ก์ง์ ๋๋ค. ์๋ฅผ ๋ค์ด, ํ ์คํธ ๋ฐ์ดํฐ๋ผ๋ฉด ํ ์คํธ๋ฅผ ํ์ฑํด์ ๋จ์ด์ ๊ฐฏ์๋ฅผ ์นด์ดํ ํ๋ ๊ฒ์ ๋๋ค. reduece ๋ ๋ถ์ฐ๋์ด ์ฒ๋ฆฌ๋ ๊ฒฐ๊ณผ๊ฐ๋ค์ ๋ค์ ํ๋๋ก ํฉ์ณ์ฃผ๋ ๊ณผ์ ์ด๋ฉฐ, ๋ถ์ฐ๋ ํ๊ฒฝ์์ ๋ณ๋ ฌ์ ์ผ๋ก ์ํ๋ฉ๋๋ค. ์ ๋ฆฌํ์๋ฉด
1. ์ชผ๊ฐ๊ธฐ(Split) : ํฐ ํ์ผ์ ์์ ๋จ์์ ์ฒญํฌ๋ค๋ก ๋๋์ด ๋ถ์ฐ ํ์ผ ์์คํ (ex. HDFS)์ ์ ์ฅ
2. ๋ฐ์ดํฐ ๊ณ ๋๋ฆฌํ๊ธฐ(Map) : ๋๋์ด์ง ํ์ผ์ ์ธํ์ผ๋ก ๋ฐ์์ ๋ถ์ํ๋ ๋ก์ง ์ํ
3. ์ฒ๋ฆฌ๋ ๋ฐ์ดํฐ ํฉ์น๊ธฐ(Reduce) : ์ฒ๋ฆฌ๋ ๋ฐ์ดํฐ๋ฅผ ๋ณํฉ(Merge)ํ๋ ๊ณผ์
(1) Fork
์ฌ์ฉ์๊ฐ map๊ณผ reduce ํจ์๋ฅผ ์ ์ํ ํ๋ก๊ทธ๋จ์ ์คํํ๋ฉด ์ด๋ Master ๋ ธ๋, map์ ์คํํ worker๋ ธ๋(์ดํ Mapper ๋ ธ๋), reduce๋ฅผ ์คํํ worker๋ ธ๋(์ดํ Reducer ๋ ธ๋)๋ค์ ๋ณต์ฌ๋ฉ๋๋ค.
(2) Assign map and reduce
Master ๋ ธ๋๋ Mapper ๋ ธ๋๋ค์๊ฒ mapping ์ญํ ์, Reducer ๋ ธ๋๋ค์๊ฒ reducing ์ญํ ์ ์ํํ๋ผ๊ณ ์ง์ ํด์ค๋๋ค. ์ด ๋, mapper ๋ ธ๋์ ๊ฐ์๋ reducer ๋ ธ๋์ ๊ฐ์๋ ์ฌ์ฉ์๊ฐ ์ค์ ํ ์ ์์ต๋๋ค.
(3)(4) Read map, Local write
Mapper ๋ ธ๋๋ค์ ๋ฐ์ดํฐ ์ฒญํฌ๋ฅผ HDFS๋ก๋ถํฐ ์ฝ์ด์ต๋๋ค. ๊ทธ ๋ค์ ์ด ๋ฐ์ดํฐ์ Map ํจ์๋ฅผ ์คํํ์ฌ Key:Value ํํ์ Intermediate ๋ฐ์ดํฐ๋ฅผ ์์ฑํ๊ณ ์ด๋ฅผ ์๊ธฐ ์์ ์ ๋ก์ปฌ ๋์คํฌ์ ์ ์ฅํฉ๋๋ค. ๊ทธ ๋ค์ Mapper ๋ ธ๋๋ ๋ง์คํฐ ๋ ธ๋์๊ฒ Mapping ์์ ์ ๋ชจ๋ ์๋ฃํ์๋ค๊ณ ์๋ ค์ค๋๋ค.
(5)(6) Reduce, Write
๊ทธ๋ฌ๋ฉด Master ๋ ธ๋๋ Reducer ๋ ธ๋๋ค์๊ฒ reduce ์คํ์ ๋ช ๋ นํฉ๋๋ค. reducer ๋ ธ๋๋ค์ mapper ๋ ธ๋๋ค์ ๋์คํฌ์ ์ ์ฅ๋์ด ์๋ Intermediate ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์ค๊ณ reduce ํจ์๋ฅผ ์คํํ์ฌ ์ต์ข ๊ฒฐ๊ณผ๋ฌผ์ ์ค์ ํ ํ์ผ ํํ๋ก ์ถ๋ ฅํฉ๋๋ค.
๋ค์์ "hello python"์ด๋ผ๋ ๋ฌธ์์ด์ ์ํ๋ฒณ ๋น๋์๋ฅผ ์ฐพ๋ ์์ ์ ๋๋ค.
Mapper : ์ ๋ ฅ ๋ฐ์ดํฐ๋ฅผ ๋๋๊ณ Mapping
#input data
text = "hello python"
def mapper(text):
split = []
for i in text:
split.append((i, 1))
return split
Reducer : Mapper์์ ์ ๋ ฅ๋ฐ์ ๊ฐ ์ค ๊ฐ์ ํญ๋ชฉ์ ํฉ์นจ.
def reducer(split):
out = {}
for i in split:
if i[0] not in out.keys():
out[i[0]] = 1
else:
out[i[0]] += 1
return out
MapReduce ๊ฒฐ๊ณผ
๋ง์น๋ฉฐ
์ค๋์ MapReduce์ ๋ํด ์์๋ดค์ต๋๋ค. ์ฌ์ค ์ค๋ ์ ๋ถํฐ ์๋ ๊ฐ๋ ์ด๊ณ Mapreduce์ ์ฝ์ ์ด ๋ง์ด ์๋ ค์ ธ ์๋ ์ํฉ์ ๋๋ค. mapํจ์๊ฐ ๋ชจ๋ ์ข ๋ฃ๋์ผ reduceํจ์๊ฐ ์คํ๋๋ ๊ตฌ์กฐ์ด๊ธฐ ๋๋ฌธ์ ์ค์๊ฐ ๋ถ์์ด ์ด๋ ต์ต๋๋ค. ๊ทธ ๋์์ผ๋ก Spark๋ mapํจ์๊ฐ ์ ๋ถ ์ข ๋ฃ๋์ง ์๋๋ผ๋ map์ ๊ฒฐ๊ณผ๋ฅผ ์คํธ๋ฆฌ๋ฐํ๋ ๋ฐฉ์์ผ๋ก ๋ณด์ํ์ต๋๋ค. ๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ MapReduce๋ ๋ฐฐ์น์ฑ ํต๊ณ์์ ์ ์ ๋ฆฌํ๊ณ Spark ๋ํ ํ๋ก์ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌ๋ํ๋ ๋ฐฉ์์ด ๋ณดํธ์ ์ด๊ธฐ ๋๋ฌธ์ MapReduce์ ๋ํ ํ์คํ ์ดํด๋ ์ค์ํฉ๋๋ค.
์์ฆ ๊ธ์ฐ๊ธฐ์ ์ํํ์ฌ ํฌ์คํ ์ด ๋ฆ์ด์ง๊ณ ์๋๋ฐ ํ์คํ ๊ธ์ฐ๊ธฐ ์๊ฐ์ ์ ํด๋๊ณ ์ง์คํ๋ ๊ฒ์ด ์ข์๋ณด์ ๋๋ค. ๊ทธ๋์ ์ผ์์ผ ์คํ๋ฅผ ๊ธ์ฐ๊ธฐ ์๊ฐ์ผ๋ก ์ก์์ต๋๋ค. ๊ณต๋ถ ์ ๋ฆฌํ๋ ๊ฒ ์ด์ธ์๋ ์ํ์ด๋ ์ต์ ๊ธฐ์ ์ ๋ํ ํฌ์คํ ๋ ์๊ฐ ์ค์ ๋๋ค. ์ฌํด์๋ ๋ ์ข์ ๊ธ์ฐ๊ธฐ๋ฅผ ํ๊ธฐ ์ํด ๋ ธ๋ ฅํด์ผ๊ฒ ์ต๋๋ค. ์ฝ์ด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค :)
Reference
'Data Engineering > Hadoop' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Hadoop Study] ํ์ด๋ธ(Hive) (1) - ํ์ด๋ธ ๊ตฌ์กฐ์ ์๋ ๊ณผ์ (0) | 2021.02.21 |
---|---|
[Hadoop Study] vol 2. HDFS(Hadoop Distributed File System) ๊ฐ๋ ๊ณผ ๊ตฌ์กฐ (4) | 2020.11.28 |
[Hadoop Study] vol 1. Hadoop์ด๋? (2) | 2020.11.12 |
๋๊ธ