728x90

하둡 맵리듀스

  • 구글의 발표한 논문에 하둡위에 소프트웨어 프레임워크로 구현
  • key-value 구조가 알고리즘의 핵심
  • 데이터의 분산처리가 가능한 연산에 적합(모든 문제를 해결하기에 적합하지는 않음)

맵리듀스 알고리즘(키밸류 구조가 핵심)

  • HDFS에 분산 저장되어 있는 데이터를 병렬로 처리하여 취합하는 역할
  • 자바뿐 아니라 파이썬등 다양한 언어 지원
  • job에 대한 구동 및 관리는 하둡이 알아서 함(개발자는 비즈니스 로직 구현에 집중)

-> sql 언어보다 간단하지 않고, 매번 개발을 해야함. 

-> 하둡 자체가 작은 데이터를 처리하기에 적합하지 않다. 

 

맵리듀스의 구동 방식

- local : 흔히 사용하지 않는다

- classic : 하둡 1.0 버전대까지 유지하던 맵리듀스 분산 처리 방식으로 job tracker와 task tracker를 사용

- yarn : 하둡 2.0 버전에서 사용하는 맵리듀스 분산 처리 방식, 맵리듀스 외의 워크로드 수용이 가능한 맵리듀스 버전2

 

 

맵리듀스 1.0

inputsplit

- 각 쪼개진 블록을 논리적인 블록 그룹으로 그룹핑을 하고 mapper에 전달하게 되는 단위가 inputsplit이다.

- mapper의 입력으로 들어오는 데이터를 분할하는 방식을 제공하기 위해 데이터의 위치와 읽어들이는 길이를 정의함.

->  클라이언트에서 어플리케이션을 하나 만들면 하둡 job tracker에 실행을 제출

이 때 자바로만 만들어야 자동으로 할당하고 다른 언어로 작업한 경우에 배포해야한다. 

-> 맵 태스크는 로컬디스크에서 제일 처음 뜨는 태스크이다. 맵에서 작업해서 output이 나오면 파티셔닝을 하여 키가 같은 애들끼리 묶어서 리듀스 작업을 진행한다. 

-> 위의 작업은 일종의 데이터 내에서 andy, hi, bob이 몇번 나왔는지를 연산하기 위함이다. 

-> merge, sort하는 과정에서 트래픽이 발생한다. 맵 서버와 리듀스 서버는 서로 다른 서버이다. 같은 키를 가지고 있는 애들끼리 같은 서버로 데이터를 보내는 작업을 해야한다. 


하둡자체만으로 데이터가 유실되는 경우는 거의 없고, 하둡과 연관된 다른 써드파티 애플리케이션과 통신되는 과정에서 데이터가 유실되는 경우는 있다. 

온프레미스에서 하둡을 구성할 때는 쿠버네티스나 도커를 많이 쓰기도 한다. 관리 측면에서는 좋다. 보통 클라우드로 하둡을 올릴 때 가상화 기술및 서버 도입을 고려한다. 

키 밸류를 뭐로 하냐에 따라서 파티셔닝이 결정된다. 이에 따라서 태스크가 한 쪽에 몰릴 수도 있다. 따라서 분산이 잘될 수 있는 키를 설정하는 것 또한 중요하다. 


맵리듀스 구현

- 필수는 mapper이다. reduce는 옵션이다.

- 어떤 포맷의 데이터를 읽을 것이냐를 inputformat을 설정. 직접 구현할 수도 있다.

- suffle/sort 과정에서 트래픽 발생 

 

 

 

 

 

 

 

 

 

 

 

1) inputformat 

  • 입력 파일이 분할되는 방식(inputsplit)이나 읽어들이는 방식을 정의한다 
  • 물리적 input file을 논리적 input split으로 나누고 각각의 inputsplit을 mapper에 할당하는 역할을 한다

sequence file이란?

- 하둡 자제척으로 구현된 바이너리 파일 포맷으로 키밸류로 구성
- 바이너리 파일이라서 텍스트 파일 포맷보다 연산속도가 빠르다
- 쓰기, 읽기, 정렬을 위한 클래스가 기본으로 제공
- mapper에서 생성하는 immediate 결과 파일을 저장하는 방식
- 압축여부에 따라 3가지 포맷 존재
 1. 압축을 하지 않는 방식
 2. value만 압축
 3. block 단위로 압축
- 주로 small file들이 많이 생성되는 경우, 키 + 타임스탬프 형태로 이를 보완할 수 있어서 자주 사용됨, 
- suffling과정에서 압축을 통해 트래픽 전송량을 줄이기 위한 목적으로도 사용됨

recorereader?

- 실제 파일에 접근하여 데이터를 읽어들임. 읽어들인 데이터를 키 밸류 형태로 반환함

 

2) mapper

  • 맵리듀스 프로그램에서 사용자의 비즈니스 로직이 구현된 첫번째 데이터 처리 구간
  • intermediate 결과 파일을 로컬 디스크에 키밸류로 파티션 정보를 포함하여 생성 

3) combiner

  • 데이터 전송량을 줄이기 위해서, mapper 결과를 미리 연산한다. 즉 reduce에서 하는 연산을 미리 한번 더 해서 트래픽으로 전달해야 하는 양이 줄어든다. 

4) partitioner

  • 기본 파티셔너는 데이터의 키값을 해싱처리하고 리듀서의 개수만큼 모듈러 연산

5) suffling & sort

  • mapper의 결과파일이 리듀서로 전달되는 과정으로 트래픽 발생
  • 서로 다른 mapper로부터 받은 데이터를 키 중심으로 sorting 수행(같은 키에 해당하는 것을 리듀서에 전달) 

6) reducer

  • mapper의 출력 결과를 입력으로 받아서 데이터를 처리
  • 처리된 데이터를 outputformat의 형태에 맞게 결과로 출력
  • 리듀서 구현은 옵션이다.

7) outputformat

 

맵리듀스 job 진행상황과 상태 갱신

  • 잡에대한 실행 상태를 tt가 job tracker에 보고한다. 
  • 잡을 수행하는 도중에 장애가 나면 job tracker가 장애가 난 서버가 실행하는 데이터를 가지고 있는 다른 서버의 tt에 잡 실행을 명령한다. 
  • 잡에 대한 관리도 하둡 내부적으로 알아서 관리되도록 알고리즘 구성

 

맵리듀스 2.0 - Yarn

1.0과 2.0의 차이

  • 이전 버전은 4천노드 이상의 매우 큰 클러스터 상에서 동작 시 병목 현상 이슈가 발생
  • 확장성 문제를 해결하기 위해 jobtracker의 책임을 여러 컴포넌트로 분리
    - resource manager : 클러스터의 컴퓨팅 리소스 이용 상태를 관리하고 할당
    - application master : 클러스터에서 실행중인 job의 life cycle을 관리
    - node manager : 컨테니어를 모니터링 하고 job이 할당받은 그 이상의 리소스가 사용되지 않도록 보장
  • job tracker와 다르게 응용 프로그램의 각 인스턴스는 application master를 고정적으로 할당시켜 응용 프로그램의 지속성을 유지
  • cluster resource managermen(yarn)t와 data processing영역을 분리하여 맵리듀스 이외의 다른  data processing 방식도 수용가능한 아키텍쳐로 변경

-> 2.0은 HDFS에 저장된 데이터를 yarn이라는 전체 클러스터 리소스를 관리하는 리소스 매니저를 통해서 맵리듀스로 데이터를 프로세싱하거나 다른 분산처리 알고리즘을 하둡 내에서 실행할 수 있게 된 것이다. 

-> 보든 분산/ 병렬처리 알고리즘을 수용할 수 있게 한것이다.

-> 2.0에는 job tracker라는 데몬이 없고, resource manager가 있다. 

-> task tracker대신 node manager가 등장

-> 하나의 어플리케이션을 만들어서, 잡을 submit을 하면 리소스 매니저가 리소스 상태를 주기적으로 리포팅 받다가, 이러한 어플리케이션을 어느 서버에 실행할 것인지를 정해서 해당 서버의 노드 매니저에 명령을 내림. 그러면 노드 매니저가 어플리케이션 마스터를 실행한다. 이때 어플리케이션 마스터가 1.0의 job tracker이다. task tracker를 실행하는 애를 컨테니어라고 표현.

-> 어플리케이션 마스터가 항상 떠있는 것이 아니라, 리소스 매니저를 통해서 실행명령이 내려지면 그때 떠서 실행

-> yarn을 통해서 잡을 실행하면 실제로 클러스터 상태에 따라서 실행에 몇초의 시간이 걸린다. 

 

즉 기본적으로 구동되는 시간이 소요되므로 작은 데이터를 처리하는데에 용이하지 않다.

-> job마다 이를 관리하는 어플리케이션 마스터가 있다. 맵이나 리듀스 태스크로 주기적으로 상태를 리포팅 받음

 

하둡 3.0에서 달라지는 것은? 

  • erasure coding :  복제본으로 인해 기본적으로 사용되는 용량을 조금 줄여주는 것. 

 

맵리듀스 최적화

  • 메모리 설정

-> 어플리케이션 마스터나 컨테이너 등의 메모리를 설정해주기. 

  • 정렬 속도 튜닝 
  • 맵 출력 데이터 압축
  • 등등...

 

728x90

+ Recent posts