본문 바로가기

Minding's Programming/Spark

[Hadoop] MapReduce 프로그래밍이란?

728x90
반응형

MapReduce 프로그래밍의 특징

MapReduce 프로그래밍은 기본적으로 빅 데이터 처리를 위해 만들어졌기 때문에, 일반 데이터 처리와는 다른 특징이 있다. 큰 특징은 아래와 같다.

  • 데이터 셋은 Key, Value의 집합이며 변경 불가(immutable) - 포맷은 하나로 고정
  • 데이터 조작은 map과 reduce 2개의 오퍼레이션으로만 가능
    • 이 2개의 오퍼레이션은 항상 하나의 쌍으로 연속 실행
    • 이 두 오퍼레이션 코드를 개발자가 채워야 함
  • MapReduce 시스템이 Map의 결과를 Reduce단으로 모아줌
    • 위 단계를 셔플링이라고 부르며, Network단을 통한 데이터 이동이 발생
    • Map의 결과 중 key가 같은 것을 모아주고 Reduce로 보냄

 

Map과 Reduce

Map: (k, v) --> [(k', v')*]

  • 입력은 시스템에 의해 주어지며, 입력으로 지정된 HDFS 파일에서 넘어옴
  • key, value 페어를 새로운 key, value 페어 리스트로 변환한다.
  • 출력: 입력과 동일한 key, value 페어를 출력하거나, 출력이 없어도 됨

Reduce: (k', [v1', v2', v3', v4' ...]) --> (k", v")

  • 입력은 시스템에 의해 주어지는데, Map의 출력 중 같은 key를 갖는 key, value 페어를 시스템이 묶어 입력
  • key, value 리스트를 새로운 key, value 페어로 변환
  • SQL의 GROUP BY와 흡사한 모습
  • 출력이 HDFS에 저장됨

예시: WordCount

MapReduce로 단어를 세는 프로그램을 작동시켜본다고 가정하면, 위와 같은 흐름으로 나타난다.

  1. 3개의 문장이 input으로 주어진다.
  2. 각 문장 별로 단어를 나누어, mapping을 통해 단어 수를 센다
  3. 같은 key를 가진 단어를 그룹으로 묶는다.
  4. 같은 key를 가진 단어의 그룹을 Reducing하여, Input의 모든 문장에서 해당 단어가 나온 횟수를 표시한다.
  5. 결과값을 출력한다.

 

728x90