티스토리 뷰
오늘은 Hadoop의 구성요소 중 하나인 MapReduce에 대해 알아보자.
- Hadoop Common : 대부분의 사용 사례를 지원하는 기본 유틸리티
- Hadoop MapReduce : 대규모 집합으로 매핑한 다음 필터링하여 특정 결과를 찾는 방식으로 데이터를 처리
- HDFS(Hadoop Distributed file System, 하둡 분산 파일 시스템) : 쉽게 액세스할 수 있는 형식으로 데이터를 저장
- Hadoop YARN : 리소스 관리 및 일정 예약
맵리듀스(MapReduce) 란?
: 대용량의 데이터 처리를 위한 분산 프로그래밍 모델로 소프트웨어 프레임워크이다.
Map : Key와 Value라는 두개의 값을 쌍으로 가지는 데이터를 담아두는 자료 구조 중 하나
Reduce : Map에서 출력된 데이터에서 중복 데이터를 제거하고 원하는 데이터를 추출하는 작업
여러개의 디스크에 데이터를 병렬로 쓰거나 읽는 경우를 고려해보자.
분할된 데이터를 어떻게 해서든 결합해야 할 경우 MapReduce는 디스크에서 데이터를 읽고 쓰는 문제를 키-값 쌍의 계산으로 변환한 추상화된 프로그래밍 모델을 제공한다.
MapReduce 는 전제가 한 번의 쿼리로 전체나 상당한 규모의 데이터셋을 처리하는 일괄 질의 처리기고, 전체 데이터셋을 대상으로 비정형 쿼리를 수행하고 합리적인 시간 내에 그 결과를 보여주는 능력을 지니고 있다.
MapReduce의 강점은 기본적으로 일괄 처리 시스템이라는 것이고, 대화형 분석에는 적합하지 않다. 일반적으로 질의를 처리하는데 1분 이상 소요 되므로 오프라인 용도로 적합하다고 볼 수 있다.
하둡은 초기 일괄 처리를 위해 만들어 졌으나 지금은 다양한 처리 패턴이 생겨났다.
1. 대화형 SQL : 맵리듀스 대신 장기 실행 전용 데몬(임팔라 Impala)이나 컨테이너를 재사용하는(테즈 Tez 기반의 하이브) 분산 쿼리 엔진을 사용한다.
대용량 데이터셋에 대한 확장성이 있으면서 하둡 기반의 SQL 쿼리를 실행할 때 빠른 응답 속도를 갖는다.
2. 반복 처리 : 머신러닝과 같은 다수의 알고리즘은 근본적으로 반복 연산을 한다.
따라서 각 반복 단계마다 디스크에서 데이터를 불러오는 것보다는 메모리에 임시 작업 데이터셋을 보존하는 것이 더 효율적이다.
맵리튜스 아키텍처는 이러한 방법을 허용하지 않지만 예를 들어 스파크를 이용하면 매우 간단하게 해결된다.
스파크는 데이터셋을 탐색하는 방식의 작업을 허용한다.
3. 스트림 처리 : 스톰(Storm), 스파크 스트리밍(Spark Streaming), 삼자(Samza)와 같은 스트리밍 시스템은 실시간으로 실행되고 경계가 없는 스트림 데이터를 분산 계산하여 그 결과를 하둡 저장소나 외부 시스템에 보낼 수 있다.
4. 검색 : 솔라(Solr) 검색 플랫폼은 하둡 클러스터에서 실행될 수 있다.
솔라는 문서를 색인하여 HDFS에 저장하고, HDFS에 저장된 색인을 기반으로 검색 쿼리를 제공한다.
맵리듀스 작업은 크게 맵 단계와 리듀스 단계로 구분된다.
각 단계는 입력과 출력으로 키-값의 쌍을 가지며, 그 타입은 프로그래머가 선택한다.
또한, 프로그래머가 맵 함수와 리듀스 함수를 작성해야 한다.
잘못된 레코드를 걸러주는 작업은 맵 함수에서 수행하는 것이 적합하다.
맵 단계에서 (키, 값)으로 출력된 데이터를 리듀스 함수의 입력으로 보내게 되는데 이 과정은 맵리듀스 프레임워크에 의해 처리된다.
그렇다면 빅데이터는 왜 맵리듀스의 개념을 사용하게 된 것일까?
빅데이터는 수많은 서버에서 병렬로 처리해야 하기 때문에 처리 프로세스는 최대한 단순하게 만들어야 한다.
프로세스를 단순하게 만들기 위해서는 기준이 되는 값이 하나여야 한다.
그래서 기준이 되는 값이 Key 하나인 맵 구조를 선택한 것이다.
예를들어 똑같은 형태의 로그를 출력하고 그 안에서 특정한 데이터만 뽑아낸다고 할 때, (Key, Value) 형태로 맵을 만들도록 Map 함수를 설정해 주면된다.
다음에는 HDFS에 대해 알아보자,
이상!
'공부방' 카테고리의 다른 글
[R] KNN(K-Nearest Neighbors) 알고리즘 - 승차식 잔디깎이 (0) | 2022.01.14 |
---|---|
[HDFS] 하둡 분산 파일 시스템(HDFS, Hadoop Distributed File System)이란? (0) | 2021.12.21 |
[Hadoop] 하둡(Hadoop) 이란? (0) | 2021.12.18 |
[Git] Git 브랜치 생성하기 - git bash (0) | 2021.11.16 |
[R] 통계분석 - One Sample t-test 실습 예제 (0) | 2021.05.15 |