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 파일 전송 과정
- 클라이언트는 저장하고자 하는 파일을 여러 개의 블록으로 분리
- 첫 번째 블록을 저장하기 위해 네임 노드에 저장 작업 요청
- 네임 노드는 해당 블록을 저장하기 위한 3개의 데이터 노드를 선정하여 클라이언트에게 목록 전달
- 클라이언트는 전달받은 첫 번째 데이터 노드에 데이터를 전송
- 첫 번째 데이터 노드는 데이터를 받으며 받은 데이터를 다음 데이터 노드에 전달,
다음 데이터 노드는 그다음 데이터 노드에 전달
- 모든 데이터 노드들이 데이터 블록을 저장하고 나서 네임 노드에 DONE 신호를 전송
- 남은 블록들도 같은 방법으로 반복하여 처리하고, 마지막에 파일을 닫음
- 네임 노드는 해당 파일에 대한 메타데이터를 저장
HDFS 파일 수신 과정
- 클라이언트가 받고자 하는 파일에 대한 정보를 네임 노드에 요청
- 네임 노드는 해당 파일에 대한 모든 블록의 목록과
각 블록의 데이터 노드 목록을 클라이언트에게 회신
- 클라이언트는 네임 노드로부터 받은 정보를 바탕으로,
가장 가까운 데이터 노드로부터 첫 번째 블록을 다운받음
- 모든 블록을 데이터 노드로부터 받고 나면 하나의 파일로 저장하고 수신 완료
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의 성능 비교