빅 데이터의 MapReduce 소개 가이드

맵리듀스는 애플리케이션 개발에 있어 효율적이고 신속하며 경제적인 해법을 제시합니다.

이 모델은 병렬 처리, 데이터 지역성 등 첨단 기법을 활용하여 개발자와 조직에 다방면으로 유익합니다.

하지만 시중에는 다양한 프로그래밍 모델과 프레임워크가 존재해 선택이 쉽지 않습니다.

특히 빅데이터 처리에서는 기술 선택이 더욱 중요합니다. 방대한 양의 데이터를 처리할 수 있는 기술을 신중하게 골라야 합니다.

이러한 맥락에서 맵리듀스는 탁월한 해결책이 될 수 있습니다.

본 글에서는 맵리듀스의 개념과 그 유용성을 자세히 살펴보겠습니다.

자, 시작해 볼까요?

맵리듀스란 무엇인가?

맵리듀스는 아파치 하둡 프레임워크 내의 프로그래밍 모델이자 소프트웨어 프레임워크입니다. 이 모델은 내결함성과 안정성을 갖춘 수많은 노드(클러스터 또는 그리드)에서 대용량 데이터를 병렬로 처리하는 애플리케이션 개발에 활용됩니다.

데이터 처리는 데이터가 저장된 데이터베이스나 파일 시스템에서 이루어집니다. 맵리듀스는 하둡 파일 시스템(HDFS)과 연동하여 대용량 데이터에 접근하고 관리합니다.

맵리듀스 프레임워크는 2004년 구글에서 처음 소개되었으며, 아파치 하둡을 통해 널리 알려졌습니다. 이는 하둡의 처리 계층 또는 엔진으로서, 자바, C++, 파이썬, 루비 등 다양한 언어로 작성된 맵리듀스 프로그램을 실행합니다.

클라우드 컴퓨팅 환경에서 맵리듀스 프로그램은 병렬로 실행되므로 대규모 데이터 분석에 최적화되어 있습니다.

맵리듀스의 핵심은 “맵(map)” 및 “리듀스(reduce)” 기능을 활용하여 작업을 여러 개의 더 작은 단위로 분할하는 것입니다. 각 작업은 매핑된 후 여러 개의 동일한 작업으로 축소되므로 클러스터 네트워크 내에서 처리 능력과 오버헤드를 감소시킬 수 있습니다.

예를 들어, 많은 손님이 방문한 상황에서 식사를 준비한다고 가정해 봅시다. 모든 요리를 직접 준비하고 각 과정을 혼자서 처리한다면 시간도 오래 걸리고 매우 힘들 것입니다.

하지만, 다른 사람들에게 각기 다른 과정을 분배하여 식사 준비를 돕도록 한다면 어떨까요? 만약 친구나 동료(손님이 아닌)들에게 역할을 분담하여 식사를 준비한다면, 손님이 도착하기 전에 훨씬 더 빠르고 수월하게 식사를 준비할 수 있을 것입니다.

맵리듀스는 이와 유사하게 분산 처리 및 병렬 처리 방식을 활용하여 주어진 작업을 보다 신속하고 효율적으로 완료하도록 돕습니다.

아파치 하둡을 통해 개발자들은 맵리듀스를 활용하여 대규모 분산 데이터 세트에서 모델을 실행하고, 고급 머신 러닝 및 통계 기법을 사용하여 패턴을 발견하고 예측하며 상관관계를 파악하는 등 다양한 작업을 수행할 수 있습니다.

맵리듀스의 주요 특징

맵리듀스의 주요 기능은 다음과 같습니다.

  • 사용자 인터페이스: 맵리듀스는 각 프레임워크의 측면에 대한 상세 정보를 제공하는 직관적인 사용자 인터페이스를 제공합니다. 이를 통해 작업을 원활하게 구성, 적용 및 조정할 수 있습니다.

  • 페이로드: 애플리케이션은 맵 및 리듀스 기능을 활성화하기 위해 매퍼 및 리듀서 인터페이스를 활용합니다. 매퍼는 입력 키-값 쌍을 중간 키-값 쌍으로 변환합니다. 리듀서는 키를 공유하는 중간 키-값 쌍을 더 작은 값으로 줄이는 데 사용되며, 정렬, 셔플 및 축소의 세 가지 기능을 수행합니다.
  • 파티셔너: 중간 맵 출력 키의 분할을 제어합니다.
  • 리포터: 진행 상황을 보고하고, 카운터를 업데이트하며, 상태 메시지를 설정하는 기능입니다.
  • 카운터: 맵리듀스 애플리케이션에서 정의하는 전역 카운터를 나타냅니다.
  • OutputCollector: 이 함수는 중간 출력이 아닌 매퍼 또는 리듀서에서 출력 데이터를 수집합니다.
  • RecordWriter: 데이터 출력 또는 키-값 쌍을 출력 파일에 기록합니다.
  • DistributedCache: 애플리케이션 요구 사항에 따라 읽기 전용 대용량 파일을 효율적으로 분배합니다.
  • 데이터 압축: 애플리케이션 개발자는 작업 출력과 중간 맵 출력을 모두 압축할 수 있습니다.
  • 잘못된 레코드 건너뛰기: 맵 입력을 처리하는 동안 여러 개의 잘못된 레코드를 건너뛸 수 있습니다. 이 기능은 SkipBadRecords 클래스를 통해 관리할 수 있습니다.
  • 디버깅: 사용자 정의 스크립트를 실행하고 디버깅을 활성화하는 옵션을 제공합니다. 맵리듀스 작업 실패 시 디버그 스크립트를 실행하여 문제를 찾을 수 있습니다.

맵리듀스 아키텍처

이제 맵리듀스 아키텍처를 구성하는 요소들을 자세히 살펴보면서 그 작동 원리를 이해해 보겠습니다.

  • 작업: 맵리듀스 작업은 맵리듀스 클라이언트가 수행하고자 하는 실제 작업을 의미합니다. 이는 최종 작업을 구성하기 위해 결합되는 여러 개의 작은 작업들로 이루어집니다.
  • 작업 기록 서버: 작업 실행 전후에 생성된 로그와 같은 애플리케이션 또는 작업에 대한 모든 기록 데이터를 저장하고 관리하는 데몬 프로세스입니다.
  • 클라이언트: 클라이언트(프로그램 또는 API)는 실행 또는 처리를 위해 맵리듀스에 작업을 제출합니다. 맵리듀스 환경에서 하나 이상의 클라이언트는 처리 작업을 맵리듀스 관리자에게 지속적으로 보낼 수 있습니다.
  • 맵리듀스 마스터: 맵리듀스 마스터는 작업을 여러 개의 작은 부분으로 나누어 작업이 동시에 진행되도록 합니다.
  • 작업 파트: 하위 작업 또는 작업 파트는 기본 작업을 분할하여 얻은 결과입니다. 이들은 최종 작업을 생성하기 위해 처리되고 결합됩니다.
  • 입력 데이터: 작업 처리를 위해 맵리듀스에 제공되는 데이터 세트입니다.
  • 출력 데이터: 작업이 처리된 후 얻어지는 최종 결과입니다.

이 아키텍처에서 일어나는 핵심적인 과정은 클라이언트가 작업을 더 작고 동일한 부분으로 분할하여 맵리듀스 마스터에 제출하는 것입니다. 이렇게 하면 더 작은 작업들이 더 큰 작업 대신 처리되는 데 걸리는 시간을 단축하여 작업 처리 속도를 향상시킵니다.

하지만, 작업을 너무 작은 단위로 분할하지 않도록 주의해야 합니다. 그렇게 하면 분할 관리에 더 큰 오버헤드가 발생하여 상당한 시간 낭비가 초래될 수 있습니다.

다음으로 맵 및 리듀스 작업을 수행하기 위해 작업 부분을 활용할 수 있습니다. 맵 및 리듀스 작업에는 팀이 작업 중인 특정 사용 사례에 따라 적절한 프로그램이 사용됩니다. 개발자는 요구 사항에 맞춰 논리 기반 코드를 작성합니다.

그런 다음 입력 데이터는 맵 작업에 제공되어 맵이 키-값 쌍 형태의 출력을 빠르게 생성할 수 있도록 합니다. 이 데이터를 HDFS에 저장하는 대신 로컬 디스크를 사용하여 저장함으로써 데이터 복제 가능성을 제거합니다.

작업이 완료되면 출력을 폐기할 수 있습니다. 따라서 HDFS에 출력을 저장할 때 복제는 과도하게 됩니다. 각 맵 작업의 출력은 리듀스 작업에 공급되고, 맵 출력은 리듀스 작업을 실행하는 시스템으로 전달됩니다.

그다음으로 출력은 병합되어 사용자가 정의한 리듀스 함수로 전달됩니다. 최종적으로 축소된 출력은 HDFS에 저장됩니다.

또한, 프로세스는 최종 목표에 따라 데이터 처리를 위해 여러 번의 맵 및 리듀스 작업을 수행할 수 있습니다. 맵 및 리듀스 알고리즘은 시간 또는 공간 복잡성을 최소화하도록 최적화되어 있습니다.

맵리듀스는 주로 맵 및 리듀스 작업을 포함하므로, 이 두 작업에 대해 더 깊이 이해하는 것이 중요합니다. 따라서 맵리듀스의 각 단계를 자세히 살펴보겠습니다.

맵리듀스의 단계

이 단계에서는 입력 데이터를 출력 또는 키-값 쌍으로 매핑합니다. 여기서 키는 주소의 ID를 참조할 수 있고, 값은 해당 주소의 실제 값일 수 있습니다.

맵 단계는 분할과 매핑이라는 두 가지 주요 작업으로 구성됩니다. 분할은 기본 작업에서 분할된 하위 부분 또는 작업 부분을 의미하며, 이를 입력 분할이라고도 합니다. 따라서 입력 분할은 맵에서 사용하는 입력 청크라고 할 수 있습니다.

다음으로 매핑 작업이 진행됩니다. 이는 맵리듀스 프로그램을 실행하는 첫 번째 단계로 간주됩니다. 여기서 각 분할에 포함된 데이터는 출력을 처리하고 생성하기 위해 맵 함수에 전달됩니다.

함수 Map()은 입력 키-값 쌍의 메모리 저장소에서 실행되어 중간 키-값 쌍을 생성합니다. 이 새로운 키-값 쌍은 Reduce() 또는 리듀서 함수에 제공되는 입력으로 사용됩니다.

리듀스

매핑 단계에서 얻은 중간 키-값 쌍은 리듀스 함수 또는 리듀서의 입력으로 작용합니다. 매핑 단계와 유사하게 셔플과 리듀스의 두 가지 작업이 관련되어 있습니다.

따라서 획득된 키-값 쌍은 정렬되고 셔플되어 리듀서에 제공됩니다. 그다음으로 리듀서는 개발자가 작성한 리듀서 알고리즘을 기반으로 키-값 쌍에 따라 데이터를 그룹화하거나 집계합니다.

여기서 셔플링 단계의 값을 결합하여 최종 출력 값을 반환합니다. 이 단계를 통해 전체 데이터 세트를 요약하게 됩니다.

맵 및 리듀스 작업의 전체 실행 프로세스는 다음과 같은 엔티티에 의해 제어됩니다.

  • 작업 추적기: 간단히 말해 작업 추적기는 제출된 작업을 완전히 실행하는 마스터 역할을 수행합니다. 작업 추적기는 클러스터 내의 모든 작업과 리소스를 관리합니다. 또한 작업 추적기는 특정 데이터 노드에서 실행되는 모든 맵을 스케줄링합니다.
  • 다중 작업 추적기: 작업 추적기의 지시에 따라 작업을 수행하는 슬레이브로 기능합니다. 작업 추적기는 맵 및 리듀스 작업을 실행하는 클러스터 내의 모든 노드에 개별적으로 배포됩니다.

작업이 클러스터 내의 다른 데이터 노드에서 실행되는 여러 개의 작업으로 분할되기 때문에 효율적으로 작동합니다. 작업 추적기는 작업을 예약하고 여러 데이터 노드에서 실행하여 작업을 조정하는 역할을 합니다. 다음으로 각 데이터 노드에 위치한 작업 추적기는 작업의 일부를 실행하고 각 작업을 담당합니다.

또한, 작업 추적기는 진행 상황 보고서를 작업 추적기로 전송합니다. 작업 추적기는 주기적으로 “하트비트” 신호를 작업 추적기로 보내 시스템 상태를 알립니다. 오류가 발생하면 작업 추적기는 다른 작업 추적기에서 작업 일정을 재조정할 수 있습니다.

출력 단계: 이 단계에 도달하면 리듀서에서 최종 키-값 쌍이 생성됩니다. 출력 포맷터를 사용하여 키-값 쌍을 변환하고, 레코드 작성기의 도움을 받아 파일에 기록할 수 있습니다.

맵리듀스를 사용하는 이유

다음은 빅데이터 애플리케이션에서 맵리듀스를 사용해야 하는 몇 가지 이점입니다.

병렬 처리

맵리듀스에서는 모든 노드가 동시에 작업의 일부를 처리할 수 있도록 작업을 여러 노드로 분할할 수 있습니다. 따라서 큰 작업을 더 작은 단위로 나누면 복잡성을 줄일 수 있습니다. 또한 여러 작업이 단일 시스템이 아닌 다양한 시스템에서 병렬로 실행되므로 데이터를 처리하는 데 걸리는 시간이 크게 단축됩니다.

데이터 지역성

맵리듀스에서는 처리 장치를 데이터로 이동할 수 있지만 그 반대는 불가능합니다.

기존 방식에서는 데이터가 처리를 위해 처리 장치로 옮겨졌습니다. 그러나 데이터 양이 급증하면서 이 과정은 많은 문제를 야기하기 시작했습니다. 이러한 문제에는 높은 비용, 처리 시간 증가, 마스터 노드의 과부하, 잦은 오류, 네트워크 성능 저하 등이 포함됩니다.

맵리듀스는 처리 장치를 데이터로 이동하는 반대 접근 방식을 취함으로써 이러한 문제를 해결하는 데 도움을 줍니다. 이러한 방식으로 데이터는 여러 노드에 분산되어 각 노드가 저장된 데이터의 일부를 처리할 수 있습니다.

결과적으로 각 노드가 해당 데이터 부분과 병렬로 작동하므로 비용 효율성을 높이고 처리 시간을 단축합니다. 또한 모든 노드가 데이터의 일부를 처리하므로 노드에 과부하가 걸리는 것을 방지합니다.

보안

맵리듀스 모델은 더 높은 수준의 보안을 제공합니다. 클러스터 보안을 강화하면서 무단 데이터 접근으로부터 애플리케이션을 보호하는 데 도움이 됩니다.

확장성 및 유연성

맵리듀스는 확장성이 뛰어난 프레임워크입니다. 수천 테라바이트에 이르는 데이터를 사용하여 여러 시스템에서 애플리케이션을 실행할 수 있습니다. 또한 구조화, 반구조화 또는 비구조화된 모든 형식 또는 크기의 데이터를 처리할 수 있는 유연성을 제공합니다.

간단함

맵리듀스 프로그램은 자바, R, Perl, 파이썬 등 다양한 프로그래밍 언어로 작성할 수 있습니다. 따라서 데이터 처리 요구 사항을 충족시키면서 누구나 쉽게 프로그램을 배우고 작성할 수 있습니다.

맵리듀스의 사용 사례

  • 전체 텍스트 인덱싱: 맵리듀스는 전체 텍스트 인덱싱을 수행하는 데 활용됩니다. 매퍼는 단일 문서의 각 단어 또는 구를 매핑할 수 있습니다. 리듀서는 매핑된 모든 요소를 인덱스에 쓰는 데 사용됩니다.
  • 페이지랭크 계산: 구글은 페이지랭크를 계산하기 위해 맵리듀스를 사용합니다.
  • 로그 분석: 맵리듀스는 로그 파일을 분석하는 데 효과적입니다. 매퍼가 접근된 웹페이지를 검색하는 동안 대용량 로그 파일을 여러 부분으로 나누거나 분할할 수 있습니다.

로그에서 웹페이지가 발견되면 키-값 쌍이 리듀서에 공급됩니다. 여기서 웹페이지가 키가 되고 인덱스 “1”이 값이 됩니다. 리듀서에 키-값 쌍을 제공한 후 다양한 웹페이지가 집계됩니다. 최종 출력은 각 웹페이지의 총 조회수입니다.

  • 역 웹 링크 그래프: 맵리듀스 프레임워크는 역 웹 링크 그래프에서도 활용됩니다. 여기서 Map()은 URL 대상과 소스를 생성하고 소스 또는 웹 페이지에서 입력을 받습니다.

그다음 Reduce()는 대상 URL과 연결된 각 소스 URL 목록을 집계합니다. 마지막으로 소스와 대상을 출력합니다.

  • 단어 계산: 맵리듀스는 주어진 문서에서 단어가 몇 번 나타나는지 계산하는 데 사용됩니다.
  • 지구 온난화: 조직, 정부 및 기업은 맵리듀스를 사용하여 지구 온난화 문제를 해결할 수 있습니다.

예를 들어 지구 온난화로 인한 해수 온도 상승에 대한 정보를 얻고자 할 수 있습니다. 이를 위해 전 세계적으로 수많은 데이터를 수집할 수 있습니다. 데이터는 고온, 저온, 위도, 경도, 날짜, 시간 등이 될 수 있습니다. 이러한 분석에는 여러 개의 맵 작업이 필요하며, 맵리듀스를 사용하면 출력 계산 작업을 간소화할 수 있습니다.

  • 약물 실험: 과거에는 데이터 과학자와 수학자들이 협력하여 질병을 퇴치할 수 있는 새로운 약물을 개발했습니다. 하지만 알고리즘과 맵리듀스가 널리 보급됨에 따라 조직의 IT 부서는 슈퍼컴퓨터와 박사 학위 소지자만이 처리했던 문제를 쉽게 해결할 수 있습니다. 이제 환자 그룹에 대한 약물의 효과를 테스트할 수 있습니다.
  • 기타 애플리케이션: 맵리듀스는 관계형 데이터베이스에 적합하지 않은 대규모 데이터도 처리할 수 있습니다. 또한, 데이터 과학 도구를 사용하고 기존에는 단일 컴퓨터에서만 가능했던 다양한 분산 데이터 세트에서 실행할 수 있습니다.

맵리듀스의 견고함과 간결함으로 인해 군사, 비즈니스, 과학 등 다양한 분야에서 응용 사례를 찾을 수 있습니다.

결론

맵리듀스는 기술 혁신의 대표적인 사례입니다. 더 빠르고 간결한 프로세스일 뿐만 아니라 비용 효율적이고 시간도 절약해 줍니다. 이러한 장점과 활용도가 증가하고 있다는 점을 고려할 때, 맵리듀스는 앞으로 산업 전반에 걸쳐 더 많이 채택될 것으로 전망됩니다.

빅데이터 및 하둡 학습에 도움이 될 만한 다양한 리소스를 살펴보시는 것도 좋은 방법입니다.