맵리듀스의 개념
맵리듀스(MapReduce)는 한 컴퓨터에서 수행할 작업을 여러 컴퓨터에 분산하여 처리하는 프로그래밍 모델입니다.
연산을 수행할 작업을 여러 컴퓨터에 자동으로 작업을 분할하고, 작업을 위한 네트워크 통신을 수행하는데 사용됩니다. 맵리듀스는 그리드 프로그램(토렌트, 웹하드) 등이 대표적입니다.
위 기술은 2004년 구글의 Jeffrey Dean과 Sanjay Ghemawat가 발표한 논문에서 사용된 기법입니다.
이 논문은 현재 빅데이터용 클러스터 컴퓨팅에 사용되는 주요 모델인 맵리듀스를 최초로 제안한 공식 자료입니다.
MapReduce 크게 map() 함수와 reduce() 함수로 구성되어 있고, 두 기능의 이름을 합쳐서 MapReduce 입니다.
- map() 함수는 분할한 데이터를 가공하는 Apply 기능을 수행하는함수입니다.
- reduce() 함수는 map() 함수로 가공한 데이터를 어떤 기준에 따라 데이터를 하나로 다시 병합하는 Combine 역할을 하는 함수입니다.
맵리듀스의 원리
위 논문에서 설명하는 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를 출력합니다.
위 그림2<Fig2>는 MapReduce의 실행(Execution) 모델로, M이 입력값을 받아 Intermediate로 출력하고, R이 Intermediate를 out_key 기준으로 Grouping한 것을 입력으로 받아 Output을 출력하는 구조로 진행됩니다.
또한 map()만 병렬수행이 가능한것이 아닌 reduce()도 가능하다는 것을 알 수 있습니다.
그러나, 초기 MapReduce의 한가지 단점인 특징을 알 수 있습니다. reduce 함수는 모든 map 함수가 중간 결과물을 리턴할 때까지 기다렸다가 한꺼번에 그룹핑한 결과가 나올 때까지 기다립니다. 즉, 모든 Group이 작업을 끝내지 않는다면, 한 그룹때문에 다른 그룹이 대기해야합니다. 지금은, 위 단점을 개선한 MapReduce 모델들이 사용됩니다.
'AI > AI 이론' 카테고리의 다른 글
[EP. 5-1] Python에서 내부적으로 문자열을 처리하는 방법 (0) | 2021.12.01 |
---|---|
[EP. 31-2] Split-Apply-Combine(분할-적용-병합) (0) | 2021.11.22 |
[EP. 31-1] 빅 데이터 처리의 기본 (0) | 2021.11.22 |
댓글