← 목록으로
단계 06
MapReduce · Hadoop · YARN
데이터가 여러 컴퓨터에 나뉘어 있을 때 어떻게 계산할까? "나눠서 세고, 모아서 합친다"는 MapReduce의 아이디어와 Hadoop이 뭔지 개념만.
한 문장으로
데이터가 100대에 나뉘어 있으면, 데이터를 한곳에 모으지 말고, 계산을 100대에 보내서 각자 하게 하자.
이게 MapReduce의 전부입니다.
비유: 도서관 책 세기
도서관에 책이 100만 권 있고, 주제별로 몇 권인지 세고 싶습니다. 혼자 세면 며칠 걸립니다.
- Map (나눠서 세기) — 사서 100명이 각자 자기 서가만 세어 "소설 120권, 과학 80권" 같은 쪽지를 씀
- Shuffle (같은 것끼리 모으기) — 쪽지를 "소설"끼리, "과학"끼리 한 곳에 모음
- Reduce (합치기) — 각 주제별로 숫자를 더함
Map: "big data" → (big,1) (data,1)
"data lake" → (data,1) (lake,1)
Shuffle: big → [1] data → [1,1] lake → [1]
Reduce: big=1 data=2 lake=1
Python으로 흉내 내기
실제 Hadoop 없이도 아이디어는 몇 줄로 확인할 수 있습니다.
from collections import Counter
lines = ["big data", "data lake", "big lake"]
words = []
for line in lines: # map: 단어로 쪼개기
words.extend(line.split())
print(Counter(words)) # shuffle + reduce: 같은 단어끼리 세기
# Counter({'big': 2, 'data': 2, 'lake': 2})
Hadoop은 이걸 수백 대에서 동시에 하는 것뿐입니다.
Hadoop이란
Hadoop은 하나의 프로그램이 아니라 세 가지 부품의 묶음입니다.
| 부품 | 하는 일 | 비유 |
|---|---|---|
| HDFS | 저장 | 창고 |
| YARN | 어느 컴퓨터가 얼마나 일할지 배분 | 작업 반장 |
| MapReduce | 실제 계산 | 일꾼 |
YARN은 "이 작업에 컴퓨터 10대 쓰세요"처럼 자원을 나눠주는 역할입니다. 나중에 배울 Spark도 YARN 위에서 돌릴 수 있습니다.
MapReduce의 한계 → Spark
MapReduce는 단계마다 결과를 디스크에 썼다가 다시 읽습니다. 그래서 느립니다. 이 문제를 메모리에서 처리해 해결한 것이 다음에 배울 Spark입니다.
연습
- 위 Python 코드를 "지역별 매출 합계"로 바꿔보기 (map = (지역, 금액), reduce = 합)
- 친구에게 MapReduce를 도서관 비유로 1분 안에 설명해보기