본문 바로가기
AI/AI 이론

[EP. 31-3] 맵리듀스(MapReduce)의 개념과 원리

by 티옌.liy 2021. 11. 22.

맵리듀스의 개념

 

맵리듀스(MapReduce)는 한 컴퓨터에서 수행할 작업을 여러 컴퓨터에 분산하여 처리하는 프로그래밍 모델입니다.

연산을 수행할 작업을 여러 컴퓨터에 자동으로 작업을 분할하고, 작업을 위한 네트워크 통신을 수행하는데 사용됩니다. 맵리듀스는 그리드 프로그램(토렌트, 웹하드) 등이 대표적입니다.

 

위 기술은 2004년 구글의 Jeffrey Dean과 Sanjay Ghemawat가 발표한 논문에서 사용된 기법입니다.

이 논문은 현재 빅데이터용 클러스터 컴퓨팅에 사용되는 주요 모델인 맵리듀스를 최초로 제안한 공식 자료입니다.

 

MapReduce 크게 map() 함수와 reduce() 함수로 구성되어 있고, 두 기능의 이름을 합쳐서 MapReduce 입니다.

  • map() 함수는 분할한 데이터를 가공하는 Apply 기능을 수행하는함수입니다.
  • reduce() 함수는 map() 함수로 가공한 데이터를 어떤 기준에 따라 데이터를 하나로 다시 병합하는 Combine 역할을 하는 함수입니다.

맵리듀스의 원리

 

Fig1. Mapreduce model overview

 

위 논문에서 설명하는 Mapreduce 모델의 개요는 위 그림1<Fig1>과 같습니다.

Mapreduce 모델의 map()과 reduce() 2개의 함수는 분할 단계(Split)을 전제로 기술되어 있습니다.

이는 map()의 입력 매개변수로 in_key를 입력받는 모습으로 알 수 있습니다.

 

Map()

map()는 in_key와 in_value를 입력받는 모습을 확인할 수 있습니다.

in_key는 분할 단계의 결과로 얻은 Partitioning의 Key 값입니다.

즉, 작업을 100개로 분할 했다면 0 ~ 99의 키 값을 갖는것입니다.

 

Reduce()

 

reduce()의 입력 매개변수는 여러 map() intermediate_value들을 out_key 별로 구분한뒤 리스트 형태로 구성된 데이터를 입력으로 합니다. 위 리스트 데이터로, out_key 기준으로 총합 연산을 진행합니다. 최종적으로 out_value의 list를 출력합니다.

 

Fig2. Mapreduce의 실행 모델

 

위 그림2<Fig2>는 MapReduce의 실행(Execution) 모델로, M이 입력값을 받아 Intermediate로 출력하고, R이 Intermediate를 out_key 기준으로 Grouping한 것을 입력으로 받아 Output을 출력하는 구조로 진행됩니다.

또한 map()만 병렬수행이 가능한것이 아닌 reduce()도 가능하다는 것을 알 수 있습니다. 

그러나, 초기 MapReduce의 한가지 단점인 특징을 알 수 있습니다. reduce 함수는 모든 map 함수가 중간 결과물을 리턴할 때까지 기다렸다가 한꺼번에 그룹핑한 결과가 나올 때까지 기다립니다. 즉, 모든 Group이 작업을 끝내지 않는다면, 한 그룹때문에 다른 그룹이 대기해야합니다. 지금은, 위 단점을 개선한 MapReduce 모델들이 사용됩니다.

댓글