맵리듀스 (MapReduce)

컴퓨터과학·AI
한 줄 정의: 거대한 데이터를 여러 대의 컴퓨터에 나누어 동시에 처리(Map)한 뒤, 그 결과를 모아서 하나로 정리(Reduce)하는 대용량 데이터 처리 방식입니다.
맵리듀스맵리듀스 진행 순서: 입력 분할 → Map, Map → Shuffle·Sort, Shuffle·Sort → Reduce, Reduce → 출력.입력 분할스플릿 단위Map키-값 쌍 생성·병렬Shuffle·Sort같은 키를 한 곳으로Reduce키별 집계출력분산 파일시스템+중간 결과를 디스크에 기록하고 실패한 태스크만 재실행해 장애를 견딘다한계그 디스크 왕복 때문에 반복 연산에는 느려, 메모리 기반 Spark 등이 뒤를 이었다맵리듀스맵리듀스 진행 순서: 입력 분할 → Map, Map → Shuffle·Sort, Shuffle·Sort → Reduce, Reduce → 출력.입력 분할스플릿 단위Map키-값 쌍 생성·병렬Shuffle·Sort같은 키를 한 곳으로Reduce키별 집계출력분산 파일시스템+중간 결과를 디스크에 기록하고 실패한 태스크만재실행해 장애를 견딘다한계그 디스크 왕복 때문에 반복 연산에는 느려, 메모리기반 Spark 등이 뒤를 이었다

쉽게 풀면

수만 장의 시험지를 채점해서 전체 평균을 내야 한다고 해봅시다. 혼자 다 채점하려면 몇 날 며칠이 걸리지만, 채점 도우미 100명에게 시험지를 나눠주고(Map 단계) 각자 담당분의 점수를 매기게 한 뒤, 그 점수들을 한곳에 모아 합산해서 평균을 내면(Reduce 단계) 훨씬 빨리 끝납니다. 맵리듀스도 똑같은 원리입니다.

처리해야 할 데이터를 여러 컴퓨터에 조각내어 나눠주고, 각 컴퓨터가 자기 몫을 독립적으로 계산(Map)한 다음, 그 부분 결과들을 모아서 최종 답을 만들어냅니다(Reduce).

프로그래머는 "각 조각을 어떻게 계산할지"와 "결과를 어떻게 합칠지"만 정해주면 되고, 데이터를 나누고 여러 대의 컴퓨터에 분배하는 복잡한 일은 시스템이 알아서 처리해줍니다.

왜 중요한가

맵리듀스는 데이터 병렬 처리를 단순한 프로그래밍 모델로 표준화하여 대규모 분산 컴퓨팅을 대중화시킨 개념이기 때문에 빅데이터·분산시스템 연구에서 자주 인용되는 기초적인 아이디어입니다. 이후 등장한 Spark, Hadoop 생태계 전반의 설계 철학에 영향을 주었으며, 대규모 로그 분석, 검색엔진 색인 구축, 유전체 데이터 처리처럼 데이터 양이 방대한 여러 응용 분야의 연구에서 비교 기준으로 다뤄집니다.

어떤 절차인가

프로그래머는 두 함수를 정의합니다. Map은 입력 조각 하나를 읽어 (키, 값) 쌍들을 내고, Reduce는 같은 키로 모인 값들을 합쳐 결과를 냅니다(Dean & Ghemawat, 2004). 사이의 셔플 단계에서 같은 키의 쌍이 같은 Reduce 작업으로 모입니다. 입력 분할, 작업 배정, 장애 시 작업 재실행은 실행 시스템이 맡습니다.

가상의 예(계산함): 세 개의 짧은 문서 “a b a”, “b c”, “a c c”의 단어 수를 세는 경우입니다.

단계결과
Map(문서마다 단어별 (단어, 1) 출력)(a,1) (b,1) (a,1) / (b,1) (c,1) / (a,1) (c,1) (c,1)
셔플(키별 묶음)a: [1,1,1], b: [1,1], c: [1,1,1]
Reduce(합산)a=3, b=2, c=3

같은 키를 같은 Reduce가 받는다는 점만 보장되면 문서를 어느 컴퓨터가 처리하든 결과가 같아서, 컴퓨터를 늘려 병렬화하기 쉽습니다.

언제 쓰고 무엇을 얻나

한 대의 컴퓨터에 담기 어려운 로그, 문서, 센서 자료에 단순한 집계나 변환을 적용할 때 쓰입니다. 대표적 오픈소스 구현은 하둡(Hadoop)이며(White, 2015), 국내 논문에서도 하둡 분산파일시스템과 함께 대용량 자료 분석 시스템을 제안하는 형태로 많이 등장합니다.

논문에는 이렇게 적는다

논문에서는 이렇게 쓰입니다

실제 논문에서

국내 학술지 논문에서 이 용어가 쓰인 문장을 그대로 옮겼습니다. 제목·학술지·연도와 원문 링크를 함께 적었습니다.

예시 문장

아래는 용어의 쓰임을 보여 주려고 만든 예시로, 실제 논문에서 가져온 문장이 아닙니다.

"수십 테라바이트 규모의 로그 데이터를 처리하기 위해 맵리듀스 프레임워크를 사용해 단어 빈도 집계를 분산 수행했다."

이 문장은 데이터 양이 너무 커서 컴퓨터 한 대로는 감당이 안 되므로, 맵리듀스 방식으로 여러 대의 컴퓨터에 작업을 나눠 동시에 처리했다는 뜻입니다.

"대규모 유전체 서열 정렬 작업을 맵리듀스 기반 파이프라인으로 재구성하여 단일 서버 대비 처리 시간을 크게 단축하였다."

생물정보학 연구에서 대용량 서열 데이터 처리에 분산 프레임워크를 적용한 사례를 설명할 때 사용된다.

"웹 크롤링으로 수집한 문서 집합에 대해 맵리듀스 방식의 역색인 구축을 수행하여 검색 성능을 평가하였다."

정보검색 시스템 연구에서 대규모 문서 색인화 작업을 설명할 때 흔히 쓰이는 표현이다.

조금 더 깊게 보면

맵리듀스는 각 단계 사이의 중간 결과를 디스크에 기록하고, 특정 노드가 실패하면 해당 작업만 다른 노드에서 재실행하는 방식으로 장애 허용성을 확보합니다. 이런 견고함 덕분에 신뢰할 수 없는 다수의 범용 서버로도 안정적인 대규모 처리가 가능해졌지만, 매 단계마다 디스크 입출력이 발생해 반복 연산이 많은 작업에는 비효율적이라는 한계가 있어, 이후 메모리 기반 처리를 지원하는 Spark 같은 후속 프레임워크가 등장하게 되었습니다.

주의할 점

맵리듀스는 각 단계가 끝날 때마다 중간 결과를 디스크에 저장하기 때문에 안정적이지만, 그만큼 반복 계산이 많은 머신러닝 작업 등에서는 속도가 느려질 수 있습니다. 이 때문에 이후 등장한 Spark 같은 프레임워크는 중간 결과를 메모리에 유지하는 방식으로 이 단점을 보완했습니다. 여러 서버로 요청을 나누는 로드밸런싱과는 달리, 맵리듀스는 "계산 작업 자체"를 나누고 합치는 데 초점을 둡니다.

헷갈리기 쉬운 용어

맵리듀스는 분산 처리의 한 방식이며 비슷한 말이 많습니다.

용어한 줄 설명차이점
맵리듀스데이터를 나눠 동시에 처리(Map)하고 결과를 모아 합치는(Reduce) 방식계산을 나누고 합치는 모델
아파치 스파크대용량 데이터를 메모리 기반으로 빠르게 분산 처리하는 프레임워크중간 결과를 메모리에 유지
샤딩큰 데이터베이스를 여러 조각으로 나눠 여러 서버에 분산 저장데이터의 저장 분할
로드밸런싱요청이 특정 서버에 몰리지 않게 골고루 나눠 처리요청의 분배

참고 문헌

  1. Dean, J., & Ghemawat, S. (2004). MapReduce: Simplified data processing on large clusters. Proceedings of the 6th Symposium on Operating Systems Design and Implementation (OSDI).
  2. Ghemawat, S., Gobioff, H., & Leung, S.-T. (2003). The Google file system. Proceedings of the 19th ACM Symposium on Operating Systems Principles (SOSP).
  3. Zaharia, M., Chowdhury, M., Das, T., Dave, A., Ma, J., McCauley, M., Franklin, M. J., Shenker, S., & Stoica, I. (2012). Resilient distributed datasets: A fault-tolerant abstraction for in-memory cluster computing. Proceedings of the 9th USENIX Symposium on Networked Systems Design and Implementation (NSDI).
  4. White, T. (2015). Hadoop: The Definitive Guide (4th ed.). O'Reilly Media.

표의 기준값은 위 문헌에 근거한 관례이며, 분야·학술지마다 다른 기준을 쓸 수 있습니다.

관련 용어