Data Engineering/Hadoop

[Hadoop Study] vol 3. ๋งต๋ฆฌ๋“€์Šค(MapReduce) ๊ฐœ๋…๊ณผ ๊ตฌ์กฐ

๋žญํ˜ธ(Langho) 2021. 1. 10.
Hadoop Study ์ด์ „๊ธ€

2020/11/12 - [Data Science/Hadoop] - [Hadoop Study] vol 1. Hadoop์ด๋ž€?

2020/11/28 - [Data Science/Hadoop] - [Hadoop Study] vol 2. HDFS(Hadoop Distributed File System) ๊ฐœ๋…๊ณผ ๊ตฌ์กฐ

 

 

๋“ค์–ด๊ฐ€๋ฉฐ

์ €๋ฒˆ ํฌ์ŠคํŒ…์—์„œ ์•Œ์•„๋ดค๋˜ 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)ํ•˜๋Š” ๊ณผ์ •

https://butter-shower.tistory.com/159

(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"์ด๋ผ๋Š” ๋ฌธ์ž์—ด์˜ ์•ŒํŒŒ๋ฒณ ๋นˆ๋„์ˆ˜๋ฅผ ์ฐพ๋Š” ์˜ˆ์ œ์ž…๋‹ˆ๋‹ค.

https://butter-shower.tistory.com/159

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

butter-shower.tistory.com/159

yeomko.tistory.com/31

 

 

๋Œ“๊ธ€