Map Reduce

MapReduce 란?

img

흩어져 있는 데이터를 수직화 -> 그 데이터를 각각의 종류별로 모으고(Map) -> 필터링과 정렬을 거쳐 데이터를 추출(Reduce)하는 분산처리 기술과 관련된 Framework를 의미!

Map 작업을 수행한 각각의 블럭의 결과 정보를 합치는 작업(Reduce)를 수행하게 되는 방식. 하둡에서는 계산시, 큰 파일을 블럭단위로 나누고 모든 블럭은 같은 Map 작업을 수행하고 이후 Reduce 작업을 수행하게 된다.

MapReduce의 원리

(출처 : http://www.incodom.kr/hadoop_%EC%B4%9D%EC%A0%95%EB%A6%AC)

img맵 리듀스를 비유한 그림예시

1명이 100개의 데이터를 보는 것과 / 100명이 1개씩 데이터를 보는 것 중에 어느 것이 더 빠를까? 상식적으로 100명이 1개씩 데이터를 보는 것이 훨씬 더 빠를 것이다. 이것이 분산처리의 핵심이지만 100명이 훑어본 결과를 취합하고 정리하는 시간의 소모가 있기 마련이다. 또한 탐색할 데이터의 양이 101개라거나 1개의 길이가 서로 다르다면 이를 동일한 업무크기로 나누는 일도 쉽지가 않다.

MapReduce는 이러한 처리를 도와주는 역할을 한다. 명칭 그대로 Map단계 & Reduce단계로 이루어진다.

먼저 Map단계에서는 흩어져 있는 key, value로 데이터를 묶어준다. 예를 들면 key는 몇 번째 데이터인지, value는 값을 추출한 정보를 가진다. 그리고 Reduce 단계에서는 Map단계의 key를 중심으로 필터링 및 정렬을 진행한다. 하둡에서는 위 Map & Reduce를 함수를 통해서 구현하고, MapReduce Job을 통해서 제어한다.

Map - Reduce 구성

분산형 파일시스템에서 수행되는 ① MapReduce 작업이 끝나면 HDFS에 파일이 써지고(write), ② MapReduce 작업이 시작될 때는 HDFS로 부터 파일을 가져오는(Read) 작업이 수행된다.

Map (맵)

img

Reduce (리듀스)

(EX) 맵 리듀스의 처리 과정

img
위 그림은 문자열 데이터를 포함된 단어의 빈도수를 출력해주는 과정
  • Splitting : 문자열 데이터를 라인별로 나눔

  • Mapping : 라인별로 문자열을 입력 -> (key, value) 형태로 출력

  • Shuffling : 같은 key를 가지는 데이터끼리 분류

  • Reducing : 각 key 별로 빈도수를 합산해서 출력

  • Final Result : 리듀스 메소드의 출력 데이터를 합쳐서 하둡 파일시스템에 저장

(더 자세한 설명 : https://blog.acronym.co.kr/312)

img맵 리듀스의 전체 처리 과정이다.

맵 리듀스의 잡 (Job)

Job은 'Full Program' 즉, 전체 프로그램을 의미한다. 데이터 집합을 통해 Mapper와 Reducer를 전체 실행한다. Task는 데이터 조각을 통해 하나의 Mapper 또는 Reducer를 실행하게 된다.

맵 리듀스 시스템 구성

img

Client

  • 분석하고자 하는 데이터를 Job의 형태로 JobTracker에게 전달

JobTracker

  • NameNode에 위치

  • 하둡 클러스터에 등록된 전체 Job들을 스케줄링하고 모니터링 수행

맵 리듀스 Job들은 JobTracker라는 소프트웨어 데몬에 의해 제어된다. JobTracker들은 마스터 노드에 존재하면 다음과 같은 역할을 수행한다.

  • 클라이언트는 맵리듀스의 Job을 JobTracker에게 보냄 -> JobTracker는 클러스터의 다른 노드들에게 맵과 리듀스 Task를 할당 -> 이 노드들은 TaskTracker라는 소프트웨어 데몬에 의해 각각 실행 -> TaskTracker는 실제로 맵 or 리듀스 Task를 인스턴스화하고, 진행 상황을 JobTracker에게 보고해야함

TaskTracker

  • DataNode에서 실행되는 데몬 (DataNode에 위치)
  • 사용자가 설정한 맵리듀스 프로그램을 실행
  • JobTracker로부터 작업을 요청받고, 요청받은 Map과 Reduce 개수만큼 -> Map Task와 Reduce Task를 생성
  • JobTracker에게 상황 보고