MapReduce 개념

맵 리듀스 (MapReduce)

  • 대용량의 데이터를 안전하고 빠르게 처리하기 위한 방법
  • 한 대 이상의 하드웨어를 활용하는 분산 프로그래밍 모델
  • 2004년 OSDI 컨퍼런스에서
    "MapReduce : Simplied Data Processing on Large Clusters"라는 논문을 통해 발표
  • 루씬(Lucene)의 개발자였던 Doug Cutting이
    2006년 Hadoop이라는 오픈소스 프로젝트 진행
    • Hadoop은 HDFS(Hadoop File System)이라는 대규모 분산 파일 시스템을 구축하여 탁월한 성능과 안정성을 보여줌
    • 맵 리듀스는 대용량 파일에 대한 로그 분석, 색인 구축, 검색에 탁월한 능력을 보여줌

맵 리듀스의 동작 원리


맵 리듀스의 특징

  • 맵 리듀스는 데이터를 분산하여 연산하고 다시 합치는 기술
  • 맵과 리듀스 단계로 나누고 맵 단계는 입력과 출력으로 key-value의 형태를 가지고 있음
  • 데이터를 섞어 병합하고 리듀스 함수를 통해 최종적으로 결과를 제공
  • 맵과 리듀스는 사용자가 임의로 코딩이 가능한 형태로 제공
  • 분산을 통해 분할된 조각으로 처리한 뒤 다시 모아 훨씬 짧은 시간에 계산을 완료
  • 분할된 조각이 작으면 작을수록 부하 분산에 더 좋은 효과를 나타냄
  • 너무 과하게 데이터를 분할할 경우 맵을 생성하기 위한 태스크의 오버헤드가 커지기 때문에 역효과 발생 가능

맵 리듀스의 장점

  • 분산 모델을 감추어 대용량 처리를 단순하게 만듦
  • 특정 데이터 모델이나, 스키마에 의존적이지 않는 유연성
  • 저장구조의 독립성
  • 높은 확장성

맵 리듀스의 단점

  • 기존 RDBMS 보다 불편한 스키마와 질의
  • DBMS와 비교하여 낮은 성능
  • 개발 환경의 불편함과 운영 노하우 부족
  • 단순한 데이터 처리

맵 리듀스와 RDBMS의 비교

  RDBMS 맵리듀스
데이터 크기 기가바이트 페타바이트
액세스 대화형과 일괄 처리 일괄 처리
업데이트 여러 번 읽고 쓰기 한번 쓰면, 여러 번 읽기
구조 고정 스키마 동적 스키마
무결성 높음 낮음
확장성 비선형 선형

맵 리듀스와 RDBMS의 관계

  • 맵 리듀스는 대용량의 처리를 위해 기존 데이터베이스 (RDBMS)를 보환 할 수 있음
  • 대화형으로 처리되는 문제나 업데이트에 적합한 RDBMS에 비해서
    일괄 처리 방식으로 전체 데이터셋을 분석할 필요가 있는 문제에 적합
  • 현재 클라우드 기반의 대부분 서비스들은 대용량 처리를 위해 맵리듀스 기반의
    하둡과 같은 형태로 구축되어 운영되고 있음

Hadoop의 HDFS, 맵 리듀스

HDFS의 개요

  • HDFS : Hadoop Distributed File System
  • 구성 요소
    • 클라이언트 (Client)  : 데이터 송수신 요청
    • 네임 노드 (Namenode) : HDFS 전체 시스템 제어
    • 데이터 노드 (Datanode) : 수천 대의 서버로 구성, 데이터 저장 역할 - Slave 역할
  • 데이터 처리 원칙
    • Block Size : 파일을 저장하는 단위 (64MB or 128MB)
    • Replication : 모든 블록은 여러 노드에 분산되어 저장 (기본 3개)

HDFS 파일 전송 과정

  1. 클라이언트는 저장하고자 하는 파일을 여러 개의 블록으로 분리
  2. 첫 번째 블록을 저장하기 위해 네임 노드에 저장 작업 요청
  3. 네임 노드는 해당 블록을 저장하기 위한 3개의 데이터 노드를 선정하여 클라이언트에게 목록 전달
  4. 클라이언트는 전달받은 첫 번째 데이터 노드에 데이터를 전송
  5. 첫 번째 데이터 노드는 데이터를 받으며 받은 데이터를 다음 데이터 노드에 전달,
    다음 데이터 노드는 그다음 데이터 노드에 전달
  6. 모든 데이터 노드들이 데이터 블록을 저장하고 나서 네임 노드에 DONE 신호를 전송
  7. 남은 블록들도 같은 방법으로 반복하여 처리하고, 마지막에 파일을 닫음
  8. 네임 노드는 해당 파일에 대한 메타데이터를 저장

HDFS 파일 수신 과정

  1. 클라이언트가 받고자 하는 파일에 대한 정보를 네임 노드에 요청
  2. 네임 노드는 해당 파일에 대한 모든 블록의 목록과
    각 블록의 데이터 노드 목록을 클라이언트에게 회신
  3. 클라이언트는 네임 노드로부터 받은 정보를 바탕으로,
    가장 가까운 데이터 노드로부터 첫 번째 블록을 다운받음
  4. 모든 블록을 데이터 노드로부터 받고 나면 하나의 파일로 저장하고 수신 완료

HDFS의 오류 및 장애 대응

  • 네임 노드 오류 발생 : 모든 클러스터가 죽음 ( 치명적 문제 )
  • 데이터 노드 오류 처리
    • 데이터 노드는 네임 노드에 3초 단위로 heart beat 전송
    • 네임 노드가 특정 데이터 노드의 heart beat를 10분 동안 받지 못하면
      해당 데이터 노드가 죽었다고 판단
  • 데이터 송수신 시 오류 처리
    • 클라이언트가 데이터 노드에 데이터를 전송할 때마다
      데이터 노드는 ACK 응답을 함
    • ACK 응답이 오지 않으면 여러 번 시도해보고 노드가 죽었거나 네트워크 오류로 판단
  • 데이터 체크섬(checksum) 확인
    • 데이터 전송 시 해당 데이터에 대한 체크섬을 같이 보냄
    • 데이터 노드에서 데이터를 하드디스크에 저장할 때 체크섬도 같이 저장
    • 데이터 노드는 주기적으로 네임 노드에 블록 리포트를 전송
    • 데이터 노드가 블록 리포트를 보내기 전에 체크섬이 맞는지 확인하고,
      손상된 블록은 제외하고 블록 목록을 작성해서 보냄
    • 네임 노드는 블록 리포트를 통해 문제가 발생한 데이터 블록을 알아내고 조치

불완전 복제 방지

  • 네임 노드는 블록 목록과 데이터 노드 위치 목록을 관리
  • 2개의 목록을 지속적으로 업데이트하며 수시로 모니터링을 진행
  • 장애가 발생한 노드를 찾으면,
    블록 목록과 데이터 노드 목록을 업데이트하고 오류가 발생한 데이터 노드와 블록 삭제
  • 오류 발생으로 복제 개수가 완전하지 않은 블록을 불완전 복제라고 함
  • 불완전 복제 블록을 제거하기 위해,
    데이터 노드에 새로운 복제소로 복사할 것을 요청하여 복제 개수를 맞춤

복제 위치 선정 전략

  • 클러스터는 여러 개의 데이터 노드를 가지는 렉으로 분리됨
  • 첫 번째 복제소는 클라이언트 데이터가 같은 렉의 노드에 있으면,
    첫 번째 복제소로 선정하고, 그렇지 않으면 랜덤으로 복제 노드를 선택함
  • 첫 번째 노드와는 다른 렉에서 2개의 다른 데이터 노드를 선택함
  • HDFS는 적어도 1개의 복제소에 대해 확실한 보장을 하기 위해,
    최적의 복제소 선정이 중요

Hadoop의 맵 리듀스

  • 설계 특성
    • 분산 컴퓨팅에 적합한 함수형 프로그래밍
    • 배치형 데이터 처리 시스템
    • 애플리케이션 로직의 주요 관심사를 파악하여 많은 요소 반영
  • 주요 기능
    • 자동화된 병렬 처리 및 분산처리
    • Fault-tolerance(내고장성, 결함 허용)
    • 상태 및 모니터링 툴
    • 프로그래머를 위한 추상 클래스

Hadoop의 맵 리듀스 과정

  • 원본 데이터 (파일, DB레코드)는 map 함수에 의해 <key, value> 쌍으로 전환
  • map() 함수 : 입력을 출력 key와 관련되는 1.. N개의 <key, value>를 생성
  • Map 단계 다음에서 출력 key의 중간 value들은 하나의 리스트로 합쳐짐
  • reduce() 함수 : 같은 출력 key를 가지는 final value로 중간 value들을 통합


Hadoop의 맵 리듀스 특징

  • map() 함수들은 병렬로 작동하며, 여러 입력 자료 셋으로부터 여러 중간 value 들을 생성
  • reduce() 함수들도 역시 병렬로 작동하며, 출력 key를 기준으로 각각 작업 수행
  • 모든 value들은 독립적으로 처리됨
  • 병목 : reduce는 map 단계가 완료되지 않으면 실행될 수 없음
  • MapReduce는 많은 영역에서 개발자에서 유용한 추상화 기능을 제공
  • 대용량의 계산을 심플하게 만들어 줌
  • MapReduce의 함수화된 프로그래밍 패러다임은 대용량의 애플리케이션에도 적용 가능

MongoDB의 맵 리듀스

MongoDB의 맵 리듀스 특징

  • MongoDB는 빅데이터 처리를 위한 다양한 기능을 제공
  • MongoDB는 관계형 데이터베이스에 흔히 제공하는 데이터 집계 함수들을 지원하지 않음
    (평균을 구하는 AVG, RANK 등을 제공하지 않음)
  • 기존 관계형 데이터베이스 입장에서 본다면 굉장히 불편함
  • MongoDB는 집계 함수를 지원하지 않는 대신 mapreduce를 통해서만 집계 구현 가능
    (다른 솔루션의 MapReduce 와는 다른 특징)

Hadoop과 MongoDB의 성능 비교

+ Recent posts