nathan_H

MapReduce 본문

Big Data/Hadoop

MapReduce

nathan_H 2019. 6. 12. 19:29

 

하둡은 크게 두가지로 진행이 되는데

하나는 분산저장

다른 하나는 분산처리로 진행이 된다.

 

분산 저장은 HDFS로 진행이되고

이에 대한 내용은 앞서 블로그 내용을 참고 바란다.

 

이번 글은 분산처리가 진행되는

MapReduce에 대해 알아보고자 한다.

 

MapReduce란?

 

맵리듀스는 HDFS에 분산 저장된 데이터에

스트리밍 접근을 요청하여 빠르게 

분사처리하도록 고안된 프로그래밍 모델이고 이를 지원하는 시스템이다.

 

 

또한 하둡에서 맵리듀스는 대규모 분산 컴퓨팅 혹은

단일 컴퓨팅 환경에서 개발자가 대량의 데이터를 병렬로 분석할 수 있고 

개발자는 맵리듀스 알고리즘에 맞게 

분석 프로그램을 개발하고 

데이터의 입출력과 병렬처리 등 기반 작업은

프레임 워크가 알아서 처리해준다.

 

 

MapReduce architecture

 

 

source - https://community.hortonworks.com/questions/17950/yarn-vs-mapreduce.html

 

맵리듀스 시스템은

크게 클라이언트, 잡트래커, 태스크 트래커로 구성되어 있다.

 

 

 

Job client 역활.

 

맵리듀스 시스템 중 우선 

잡클라이언트이 역활부터 알아보자.

 

1. 입력 데이터의 분할 방침 결정

- 처리 대상 입력 데이터를 어떻게 분할하여 병렬처리 할지 결정

 

2. jobtracker에게 MapReduce 의뢰

 

3. MapReduce 잡을 실행하기 위한 애플리케이션 HDFS에 저장

 

4. JobTracker로부터 진행 상태 수신

 

5. 사용자 단위로 MapReduce 잡을 관리

- 잡의 우선순위 변경이나 잡을 강제 종료.

 

 

JobTracker

 

Job 관리

1) 맵태스크 할당 제어

2) 맵 처리 결과 파악

3) JobClient에게 잡 진행 통지

 

리소스 관리

 

1) TaskTracker에게 Map이나 Reduce 처리 할당

2) 처리의 주기적 실행

3) 이상 발생시 처리 재할당

4) 처리 실패 빈도가 높은 TaskTracker 블랙리스트 생성

5) TaskTracker 동작 여부 확인

6) TaskTracker 추가 / 제외

 

잡 실행 이력 관리.

 

 

 

TaskTracker 역활

 

1) Child 프로세스 생성과 처리 실행

- child 프로세스 : map이나 reduce 작업을 동작시키는 자바 프로세스

- child 프로세스에게 jar파일이나 필요한 데이터를 전달

 

 

2) Child 프로세스 상태 확인

 

3) JobTracker로부터 처리 중지 지시가 오면, 처리 중지를 통지

 

4) Map 처리 수와 Reduce 처리 수 파악

 

5) JobTracekr에게 주기적으로 하트비트 전송

- map 또는 reduce 동시 실행 가능한 슬롯 수 포함

(현재 빈 슬롯 수도)

 

 

 

MapReduce 구성 요소

 

1) Task

- 맵퍼나 리듀서가 수행하는 단위 작업

- 맵 혹은 리듀스를 실행하기 위한 정보를 가지고 있다.

 

2) Mapper 

- 구성 : Map, Combine, Partition

- 인풋 데이터를 가공하여 사용자가 원하는 정보를 key/value 쌍으로 변환한다.

 

3) Reducer 

- 구성 : Suffle/Sort, Reduce

- 가공된 Key/Value를 key 기준으로 각 리듀서로 분배

- 사용자가 정의된 방법으로 각 Key와 관련된 정보를 추출.

 

 

 

이제 MapReduce가 어떻게 설계되고

구성되었는지 알았으니

 

Map과 Reduce의 실행과정에 대해 자세히 알아보자.

 

 

Mapping Process

 

 

source - https://vitalflux.com/hadoop-map-reduce-explained-with-an-example/

입력 파일

HDFS에 있는 입력 파일을 분할하여 FileSplit을 생성하고

FileSplit 하나 당 맵 태스크 하나씩 생성한다.

 

Map

Map은 데이터를 읽어와서 새로은 KV(key-value)페어를 생성한다.

 

Combine

KV리스트에 대한 전처리를 수행하는 과정으로

맵의 결과를 리듀스에 보내기 전에 데이터를 최소화하는 과정이다.

 

 

Partition

 

파티션은 키를 기준으로 디스크에 분할 저장하는 과정으로

각 파티션은 키를 기준으로 정렬되고 

HDFS가 아닌 맵퍼의 Local File System에 저장한다.

그리고 분할된 각 파일은 각각 다른 리듀스 태스크에 전달된다.

 

 

Reducing Process

 

Suffle

셔플은 여러 맴퍼에 있는 결과 파일을 각 리듀서에 할당하고

리듀서에 할당된 결과 파일을 리듀서의 로컬 파일 시스템으로 복사한다.

 

 

Sort

병합정렬을 이용하여 맴퍼 결과 파일을 정렬/병합하고 

key로 정렬된 하나의 커다란 파일이 생선된다.

 

Reduce

정렬 단계에서 생성된 파일을 처음부터 

순차적으로 읽으면서 리듀스 함수를 실행 한다.

 

 

source - https://community.hortonworks.com/questions/17950/yarn-vs-mapreduce.html

 

 

 

MapReduce와 HDFS의 관계

하둡은 맵리듀스와 HDFS을 통해

서로 상호작용하면서

진행이 되는데 어떠한 관계를 가지고 있고

어떻게 진행이 되는지에 대해 정리해보자.

 

 

데이터 분할

 

하둡에서는 HDFS에 데이터를 저장한다

그리고 MapReduce가 잡 처리 시 HDFS에서 데이터를 읽고,

처리 결과를 HDFS에 저장한다.

 

그리고 입력데이터를 어떻게 분할하고 처리하는 지는

JobClient가 결정하고

하나의 Map 태스크가 하나의 스플릿에서 레코드를 읽어 처리한다.

 

 

 

데이터 지역성

가능한 한, 데이터를 동작하고 있는 처리 시스템으로

옮기는 것이 아니라, 처리 프로그램을 데이터가 있는 곳으로 이동해야 한다.

 

그래서 노드 간 데이터 전송량을 줄이고, 대량의 데이터를 처리하더라도

최대한 오버헤드가 발생하지 않도록 한다.

 

여기서 잡트래커는 네임노드와 소통해 가며 태스크를 할당한다.

'Big Data > Hadoop' 카테고리의 다른 글

HDFS Architecture  (0) 2019.06.12
HDFS란? (Hadoop File System)  (1) 2019.06.12
Hadoop 이란?  (0) 2019.06.12
Comments