study blog
[Hadoop] ํ๋ก์ด๋ ๋ฌด์์ธ๊ฐ? ๋ณธ๋ฌธ
๐ก ๋ณ๋ ฌ ๋ถ์ฐ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ ์ด์
Scaling-out is superior to Scaling-up
- Scale-out : ์์ฃผ ๋ง์ ๊ฐ์ผ ์๋ฒ๋ค์ ์ด์ฉ
- Scale-up : ์ ์ ์์ ๊ฐ๋น์ผ ์๋ฒ๋ค์ ์ด์ฉ
๋ฐ์ดํฐ ์ค์ฌ (data-intensive) ์ดํ๋ฆฌ์ผ์ด์ ๋ถ์ผ์์๋ Scale-out์ ๋ ์ ํธํ๋ค. ๊ฐ๊ฒฉ๊ณผ ์ฑ๋ฅ์ด ์ ํ์ผ๋ก ์ฆ๊ฐํ์ง ์๊ธฐ ๋๋ฌธ์ด๋ค. ๋ ๋ฐฐ์ ์ฑ๋ฅ์ ํ๋ก์ธ์ ํ ๊ฐ๋ฅผ ๊ฐ์ง ์ปดํจํฐ์ ๊ฐ๊ฒฉ์ด ์ผ๋ฐ ํ๋ก์ธ์ ํ ๊ฐ๋ฅผ ๊ฐ์ง ์ปดํจํฐ ๊ฐ๊ฒฉ์ ๋๋ฐฐ ๋ณด๋ค ๋น์ธ๋ค. ๊ทธ๋ฌ๋ฏ๋ก ์ฌ๋ฌ ์ปดํจํฐ๋ฅผ ๋ฌถ์ด์ ์ฒ๋ฆฌํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋ณ๋ ฌ ๋ถ์ฐ ์๊ณ ๋ฆฌ์ฆ์ด ํ์ํ๋ค.
๐ก ๋งต๋ฆฌ๋์ค ํ๋ ์์ํฌ
- ๊ฐ์ผ ์ปดํจํฐ๋ค์ ๋ชจ์์ ํด๋ฌ์คํฐ๋ฅผ ๋ง๋ค๊ณ ์ฌ๊ธฐ์์ ๋น
๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํ scalable ๋ณ๋ ฌ ์ํํธ์จ์ด์ ๊ตฌํ์ ์ฝ๊ฒ ํ ์ ์๋๋ก ๋์์ฃผ๋ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ ๋ชจ๋ธ
- scalable : ์ฌ์ฉ์ ์๋ ๋ฐ์ดํฐ๊ฐ ๊ธ์ฆํด๋ ํ๋ก๊ทธ๋จ์ด ๋ฉ์ถ๊ฑฐ๋ ์ฑ๋ฅ์ด ๋จ์ด์ง์ง ์๋ ๊ฒ์ ์๋ฏธ
๋ฐ์ดํฐ ์ค์ฌ ํ๋ก์ธ์ฑ์์๋ ํ๋์ ์ปดํจํฐ์ ๋ฅ๋ ฅ์ผ๋ก๋ ์ฒ๋ฆฌํ๊ธฐ๊ฐ ์ด๋ ต๋ค. ์ฌ๋ฌ ์ปดํจํฐ๋ฅผ ๋ฌถ์ด์ ์ฒ๋ฆฌํด์ผ ํ๋๋ฐ ๋งต๋ฆฌ๋์ค๋ ์ด๋ฌํ ์ฒ๋ฆฌ๋ฅผ ๋๋ ์ญํ ์ ํ๋ค. ์ด๋ฆ ๊ทธ๋๋ก Map๋จ๊ณ์ Reduce๋จ๊ณ๋ก ์ด๋ฃจ์ด์ง๋ค. ๋จผ์ Map๋จ๊ณ์์๋ ํฉ์ด์ ธ ์๋ ๋ฐ์ดํฐ๋ฅผ key, value๋ก ๋ฐ์ดํฐ๋ฅผ ๋ฌถ์ด์ค๋ค. ์๋ฅผ ๋ค์ด key๋ ๋ช ๋ฒ์งธ ๋ฐ์ดํฐ์ธ์ง, value๋ ๊ฐ์ ์ถ์ถํ ์ ๋ณด๋ฅผ ๊ฐ์ง๋ค. ๊ทธ๋ฆฌ๊ณ Reduce๋จ๊ณ๋ Map๋จ๊ณ์ key๋ฅผ ์ค์ฌ์ผ๋ก ํํฐ๋ง ๋ฐ ์ ๋ ฌํ๋ค.
๊ตฌ๊ธ์์ ๋งต๋ฆฌ๋์ค ํ๋ ์์ํฌ๋ฅผ ๋ง๋ค์๊ณ ์ธ๋ถ์์ ์ฌ์ฉํ ๋๋ ์คํ์์ค์ธ ํ๋ก์ ์ด์ฉํ์ฌ ๋งต๋ฆฌ๋์ค ํ๋ ์์ํฌ๋ฅผ ๊ตฌํํ๋ค. ํ๋ก์์๋ ์ด Map๊ณผ Reduce๋ฅผ ํจ์๋ฅผ ํตํด์ ๊ตฌํํ๊ณ ๋งต๋ฆฌ๋์ค ์ก์ ํตํด ์ ์ดํ๋ค. ์ ์ ๋ ์๋ ์ธ๊ฐ์ง ํจ์๋ฅผ ๊ตฌํํด์ ์ ๊ณตํด์ผ ํ๋ค.
- Main ํจ์
- Map ํจ์ (key1, val1) -> [(key2, val2)] (๋ฆฌ์คํธ)
- Reduce ํจ์ (key2, [val2]) -> [(key3, val3)]
main ํจ์๋ ํ ๊ฐ์ ๋ง์คํฐ ๋จธ์ ์์ ์ํ๋๋ค. ์ด ๋จธ์ ์ map ํจ์๋ฅผ ์ํํ๊ธฐ ์ ์ ์ฒ๋ฆฌ๋ฅผ ํ๊ฑฐ๋ reduce ํจ์์ ๊ฒฐ๊ณผ๋ฅผ ํ์ฒ๋ฆฌํ๋๋ฐ์ ์ฌ์ฉ๋๋ค. ์ปดํจํ ์ ์ ์ ๊ฐ ์ ์ํ map, reduce ํจ์ ํ ์์ผ๋ก ์ด๋ฃจ์ด์ง ๋งต๋ฆฌ๋์ค ํ์ด์ฆ๋ฅผ ํ ๋ฒ, ํน์ ์ฌ๋ฌ๋ฒ ์ํํ๋ค.
๐ MapReduce Phase
1. ๋งต (Map) ํ์ด์ฆ
- ๊ฐ์ฅ ๋จผ์ ์ํ๋๋ฉฐ ๋ฐ์ดํฐ์ ์ฌ๋ฌ ํํฐ์ ์ ๋ณ๋ ฌ ๋ถ์ฐ์ผ๋ก ํธ์ถ๋์ด ์ํ๋๋ค.
- ๊ฐ ๋จธ์ ๋ง๋ค ์ํ๋๋ mapper๋ ์ ๋ ฅ ๋ฐ์ดํฐ์ ํ ์ค๋ง๋ค map ํจ์๋ฅผ ํธ์ถํ๋ค.
- (key, value) ์ ํํ๋ก ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๊ณ ์ฌ๋ฌ ๋จธ์ ์ ๋๋์ด ๋ณด๋ด๋ฉฐ ๊ฐ์ key๋ฅผ ๊ฐ์ง ์์ ๊ฐ์ ๋จธ์ ์ผ๋ก ๋ณด๋ด์ง๋ค.
2. ์ ํ๋ง (Shuffling) ํ์ด์ฆ
- ๋ชจ๋ ๋จธ์ ์์ map ํ์ด์ฆ๊ฐ ๋ค ๋๋๋ฉด ์์๋๋ค.
- map ํ์ด์ฆ์์ ๊ฐ๊ฐ์ ๋จธ์ ์ผ๋ก ๋ณด๋ด์ง (key, value) ์์ key๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌํ ํ , ๊ฐ์ key๋ฅผ ๊ฐ์ง value-list๋ฅผ ๋ง๋ ๋ค.
- value-list๋ฅผ (key, value-list) ํํ๋ก key์ ๋ฐ๋ผ ์ฌ๋ฌ ๋จธ์ ์ ๋ถ์ฐํด์ ๋ณด๋ธ๋ค.
3. ๋ฆฌ๋์ค (Reduce) ํ์ด์ฆ
- ๋ชจ๋ ๋จธ์ ์์ shuffling ํ์ด์ฆ๊ฐ ๋ค ๋๋๋ฉด ๊ฐ ๋จธ์ ๋ง๋ค reduce ํ์ด์ฆ๊ฐ ์์๋๋ค.
- ๊ฐ๊ฐ์ ๋จธ์ ์์ ํด๋น ๋จธ์ ์ผ๋ก ๋ณด๋ด์ง (key, value-list) ์ ๋ง๋ค reduce ํจ์๊ฐ ํธ์ถ๋๋ฉฐ ํ๋์ reduce ํจ์๊ฐ ๋๋๋ฉด ๋ค์ (key, value-list) ์์ reduce ํจ์๊ฐ ํธ์ถ๋๋ค.
- ์ปด๋ฐ์ธ (Combine) ํจ์
- reduce ํจ์์ ์ ์ฌํ ํจ์๋ก, ๊ฐ ๋จธ์ ์์ map ํ์ด์ฆ์์ map ํจ์์ ์ถ๋ ฅ ํฌ๊ธฐ๋ฅผ ์ค์ฌ ์ ํ๋ง ํ์ด์ฆ์ reduce ํ์ด์ฆ์ ๋น์ฉ์ ์ค์ฌ์ฃผ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
๐ ํ๋ก ( Hadoop )
- Apache ํ๋ก์ ํธ์ ๋งต๋ฆฌ๋์ค ํ๋ ์์ํฌ์ ์คํ ์์ค
- ํ๋ก ๋ถ์ฐ ํ์ผ ์์คํ
(Hadoop Distributed File System- HDFS)
- ๋น ๋ฐ์ดํฐ๋ฅผ ์์ฒ๋์ ๊ฐ ์ผ ์ปดํจํฐ์ ๋ณ๋ ฌ ์ฒ๋ฆฌํ๊ธฐ ์ํด ๋ถ์ฐ์์ผ ์ ์ฅ์ ํ๋ค. ๊ฐ ํ์ผ์ ์ฌ๋ฌ๊ฐ์ ์์ฐจ์ ์ธ ๋ธ๋ก์ผ๋ก ์ ์ฅํ๋ค.
- ํ ํ์ผ์ ๊ฐ๊ฐ์ ๋ธ๋ก์ fault tolerance์ ์ํด์ ์ฌ๋ฌ๊ฐ๋ก ๋ณต์ฌ๋์ด ์ฌ๋ฌ ๋จธ์ ์ ์ ์ฅ๋๋ค.
- fault tolerance : ์์คํ ์ ๊ตฌ์ฑํ๋ ๋ถํ์ ์ผ๋ถ์์ ๊ฒฐํจ์ด ๋ฐ์ํ์ฌ๋ ์ ์์ ์ผ๋ก ๊ธฐ๋ฅ์ ์ํํ ์ ์๋ ๊ฒ
๐ ๊ตฌ์ฑ์์
- MapReduce : ์ํํธ์จ์ด์ ์ํ์ ๋ถ์ฐ์ํค๋ ์ญํ
- Hadoop Distributed File System : ๋ฐ์ดํฐ๋ฅผ ๋ถ์ฐ์ํค๋ ์ญํ
- ํ๋์ Namenode, ์ฌ๋ฌ ๊ฐ์ Datanode
- Namenode (master) : ํ์ผ ์์คํ ์ ๊ด๋ฆฌํ๊ณ ํด๋ผ์ด์ธํธ๊ฐ ํ์ผ์ ์ ๊ทผ ํ ์ ์๋๋ก ํจ
- Datanode (slaves) : ์ปดํจํฐ์ ๋ค์ด์๋ ๋ฐ์ดํฐ๋ก ์ ๊ทผ ํ ์ ์๋๋ก ํจ