Table of Contents
High Level에서 봤을 때, MapReduce란 무엇인가?
•
대규모 데이터셋을 처리하기 위한 프로그래밍 모델과 구현.
MapReduce는 어떤 문제를 해결해주는가?
•
컴퓨터 한 대로는 처리하기 힘든 큰 데이터셋을 처리할 때 생기는 복잡한 문제를 해결해준다.
MapReduce는 어떻게 문제를 해결했는가?
•
MapReduce는 수천 대의 컴퓨터에 걸쳐 병렬로 작업(work)을 Scailing하는 복잡한 일을 수행할 수 있는 비교적 간단한 프레임워크이다.
•
이 프레임워크는 페타바이트 이상의 대용량 데이터를 신뢰도가 낮은 컴퓨터로 구성된 클러스터 환경에서 병렬 처리를 지원하기 위해서 개발되었다.
구현
•
사용자는 데이터를 처리하기 위해 map(), reduce() 두 함수만 구현하면 된다.
•
MapReduce 프레임워크는 데이터 파티셔닝, 여러 대의 컴퓨터에 걸친 작업 스케쥴링, 오류 처리, 나아가 분산 시스템에서의 다른 복잡한 점들 등 어려운 부분들을 핸들링한다.
•
MapReduce에서 사용되는 데이터는 Key-Value 쌍 형식이어야 한다. 전체적인 MapReduce 연산은 Key-Value 쌍의 set을 입력으로 받아 Key-Value 쌍의 set을 반환한다.
•
map() 함수는 하나의 K-V 쌍을 받아서 연산이 완료된 중간 단계의 K-V 쌍을 반환한다. MapReduce 라이브러리는 같은 Key를 가진 모든 중간 단계의 값들을 모아 Reduce에 전달한다.
•
reduce() 함수는 하나의 Key와 이와 연관된 모든 Value들을 입력으로 받아서 합쳐진 Value를 반환한다.
MapReduce의 한계
•
Map과 Reduce 작업이 모두 끝날 때까지 기다려야 한다. 즉, 수행 시간이 거의 Map과 Reduce 시간에 의해 결정된다.
MapReduce에 대한 비판
•
Michael Stonebraker는 MapReduce가 메이저가 되는 것에서 한 걸음 물러서서, MapReduce는 근본적으로 새로운 것이 아니며 오히려 기존의 DBMS가 더 낫다고 말했다. #
오늘날 MapReduce의 사용
•
MapReduce가 공개되었을 때 매우 인기있었고, Apache Hadoop, Couchdb, Riak과 같이 잘 알려진 많은 구현체들이 나왔다.
•
Google의 MapReduce 구현체는 2003년부터 2014년까지 사용되다가, 현재는 Cloud DataFlow/Apache Beam으로 대체되었다.