Software&Platform

MapReduce

Ahnchan 2011. 12. 15. 15:08

정리중 2011.12.14

 

MapReduce는 구글이 2004년에 클러스터 환경의 큰 데이터셋의 분산 컴퓨팅을 지원하기 위해 구현한 Software 프레임워크이다. 

MapReduce 라이브러리는 C++, C#, Erlang, Java, LabVIEW, OCaml, Perl, Python, PHP, Ruby, F#, R 등의 언어로 사용할 수 있다.

 

MapReduce는 많은 컴퓨터(Nodes)를 사용하여 거대한 데이터셋간 고 분산 처리 프레임워크이다. 다시 말하면  클러스터(모든 노드가 같은 하드웨어인 경우) 또는 Grid(노드가 다른 하드위어를 사용)를 말하는 것이다. 프로세스는 비정형적인 파일시스템이나 구조적인 데이터베이터에 데이터를 저장 관리할 수 있다.

 

  • Map : Master 노드는 입력 Problem을 작은 Sub-Problem으로 나누고 Worker 노드에 분배한다. Worker 노드는 이것을 다시 Multi-level 트리 구조에서 찾는다. 이 Worker 노드은 좀더 작은 Problem으로 프로세싱하고 결과를 Master 노드에 전달한다.
  • Reduce : Master 노드는 Sub-Problem의 결과를 수집하고 조합한다.

 

진행순서

  • Input reader : 'splits'(일반적으로 16MB에서 128MB)라는 적절한 사이즈로 나누고 각각의 split을 Map function에 할당한다. Input reader는 데이터를 안정적인 저장소(분산 파일 시스템)로 부터 읽는다. 그리고 key/value 쌍 형태로 변환한다.
  • Map function : 각각의 Map function은 key/value 의 시리즈들을 받는다. 그리고 0 혹은 여러개의 key/value 값을 발생시킨다. 입력 값과 결과값의 형태는 서로 다를수 있다.  만약 Application이 단어의 수를 구한다고 해보자. map function은 단어들을 쪼개서 key/value 형태의 결과값을 처리할 것이다. 각 결과값은 key인 단어와 와 '1' 의 값으로 구성될 것이다.
  • Partition function : 가가 Map function의 결과가 Application의 Partition function에 의해 부분적으로 줄여진다. (Sharding)
  • Comparison function : 
  • Reduce function : Application Reduce function이라고 부른다.  Reduce는 key와 결과가 0 또는 많은 값으로 연관된 값을 통해 반복한다. 단어 갯수 구하는 예를 들면 Reduce function은 입력 값을 가지고, 그것을 더한다. 그리고 최종 합과 단어를 하나의 결과로 만든다.
  • Output writer : Reduce의 결과를 안정적인 스토리지, 분산 파일 시스템에서 저장한다.

이 글은 스프링노트에서 작성되었습니다.