Why MapReduce?
MapReduce는 데이터를 Hadoop 서버 전체에 걸쳐 분산 프로세싱하는 기술. 오늘 날엔 Spark에 밀려서 많이 사용되지 않는 것으로 보이지만, 그 컨셉과 패러다임은 여전히 활발히 사용되고 있다.
MapReduce의 역사
- 2004년 Google의 Jeffery Dean과 Sanjay Ghemawat에 의해 Google에서 개발
- “MAPREDUCE: SIMPLIFIED DATA PROCESSING ON LARGE CLUSTERS” 논문에서 소개된, Map과 Reduce 함수에서 영감을 받았음.
- 입력 데이터의 사이즈는 큰데, 연산은 합리적인 시간 안에 완료하려다보니, 이 데이터 처리가 수 백 또는 수 천 대의 노드에 분산되어야 할 필요가 있었음
- 그러나, 이런 분산 처리를 하나하나 코드 내에서 하기에는, 원래의 목적인 인사이트를 얻는 것 그 자체보다 분산 처리에 집중하게 만들어서 배보다 배꼽이 커지는 문제가 생겼음.
- 가만 보다보니, 대부분의 분산 처리 연산이 중간 Key/Value 쌍을 계산하기 위해, 각각의 논리적 레코드(데이터 셋의 한 줄)에 Map 작업을 수행한 다음, 동일한 Key를 공유하는 모든 Value에 대해 Reduce 작업을 적용하는 과정이 포함된다는 것을 발견했음.
- 이러한 복잡성에 대응하고자, 분산 처리를 위한 기술을 추상화할 수 있도록 새롭게 설계했는데, 이것이 바로 MapReduce 논문의 시작점.
Map and Reduce
Map
- Transform - 기본적으로 Map은 데이터를 변형하는 역할을 함
- 들어온 데이터에서 필요한 정보를 뽑고, 가공이 가능한 구조로 변형.
- 모든 input line마다 mapper가 중요한 데이터를 추출하고, 이를 구조화해서 하나의 결과물을 만들어 냄
- 데이터를 Map할 때는, 집계(Reduce)하고자 하는 것, 즉, 특정 Key-Value를 갖고 구조화함.
Shuffle and Sort
- Map으로 만들어진 중간 결과물(Key:Value 쌍)을 ‘고유한 Key’:’Value 리스트’ 쌍으로 만들고, Key 값을 기준으로 소팅해주는 작업
- 이 작업은 MapReduce에서 알아서 해주는 작업으로 별도 코드로 작성할 필요가 없음
Reduce
- Aggregate - 데이터를 집계해서, 최종 연산을 수행하는 단계.