꾸준히 오래오래

데이터 엔지니어의 공부 곳간✏️

Data

맵리듀스(MapReduce)의 개념과 원리

zzi_yun 2024. 4. 4. 22:38

맵리듀스(MapReduce)란

맵리듀스(MapReduce)는 대용량 데이터를 처리하는 데 사용되는 병렬 프로그래밍 모델 및 처리 방식으로, 2004에 구글에 의해 발표되었다. 주로 분산 처리 환경에서 사용되며, 대용량의 데이터를 효율적으로 처리하기 위한 목적이다.

 

맵리듀스는 크게 MapReduce 단계로 구성이 된다.

맵(Map)은 입력된 데이터를 분할하고, 매핑하여 가공하는 단계이다.

리듀스(Reduce)는 맵(Map)으로 가공된 데이터의 중복을 제거하고 축소하는 역할을 한다.

 

맵리듀스는 이렇게 대용량의 데이터를 분산처리 환경에서 분할 및 가공 후 축소 하며 데이터를 가공하는 과정이다.

 

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

 

맵리듀스의 처리과정을 살펴보면 기존의 맵과 리듀스의 과정을 조금 세분화 할 수 있다.

단어 카운트 예시를 살펴 보면 다음과 같다.

 

출처: https://intellipaat.com/blog/what-is-mapreduce/

 

  • 분할(Splitting)
    • 데이터를 일정 크기로 분할한 뒤, 작업 노드에 전달하는 과정이다.
  • 맵핑(Mapping)
    • 분할 된 데이터에 mapping 함수가 적용하는 과정이다.
    • 예시에는 분할된 데이터에서 각 단어의 빈도수가 <key, value>의 형태로 나오게 된다.
  • 셔플링(Shuffling)
    • 맵핑 단계에서 발생한 중간 데이터에 대해서 Reducing을 하기 위해서 정렬하고 그룹화하는 과정이다.
    • 이 과정이 필요한 이유는 예시처럼 분할 및 맵핑 이후로 동일한 키 즉, 연관 데이터들이 다른 작업 노드에 위치하고 있기에 동일한 키를 갖는 중간 데이터를 같은 리듀스 태스크로 전송하기 위함이다.
    • 예시에는 동일한 단어(key)를 기준으로 그룹화 해주고 있다.
  • 리듀싱(Reducing)
    • 처리된 데이터를 집계하고, 결과물을 내보내는 과정이다.
    • 예시에는 셔플링을 통해 그룹화 된 맵핑 과정을 거친 단어의 빈도수 <key, value>를 최종적으로 카운트하여 단어별 총 빈도수 결과를 생성하였다.

보통 맵(Map)은 분할(splitting)과 맵핑(mapping)의 작업을 의미하며, 리듀스(Reduce)는 셔플링(Shuffling)과 리듀싱(Reducing) 작업을 의미한다.

 

맵리듀스(MapReduce)의 장점

  • 높은 확장성
    • 데이터의 증가 시 노드 추가를 통해서 처리량을 늘릴 수 있다.
  • 장애복구
    • 데이터 복제에 기반 하기 때문에 일부 작업 노드의 장애가 발생해도 해당 노드의 작업을 다른 노드로 이전이 가능하다.
  • 유연성
    • 특정 데이터 형식의 의존적이지 않고, 다양한 종류의 데이터에 대해 처리할 수 있다.

 

맵리듀스(MapReduce)의 한계

  • 사용의 복잡성
    • 배치 처리를 위해 사용하는 API는 장황하고 많은 양의 기본 셋업 코드가 필요한 등 사용의 복잡성이 있었다.
  • 디스크 I/O
    • 맵과 리듀스 단계에서 중간 과정의 데이터로 인한 잦은 디스크의 입출력이 발생되며, 성능 저하로 이어졌다.

이러한 맵리듀스의 한계로 조금 더 간편하고 빠른 기법에 대한 니즈가 생겨났고, 이것이 Spark 프로젝트로 이어졌다.

 

[참고 자료]