2022. 07. 28(목) Spark & Hadoop 초격차 4일차

Dylan·2022년 7월 28일
0

YARN

MapReduce 1

마스터노드의 역할은 JobTracker 가 한다 워커노드의 역할은 TaskTracker가 수행한다

JobTracker 의 부담으로 클러스터를 확장하는데 제한을 갖게되는 문제점이 있다

MapReduce 1의 문제점

  • 확장성 병목
  • 신뢰성과 가용성 문제
  • 맵리듀스 프로그래밍 모델만 지원
  • 클러스터 이용률 문제

YARN(Yet Another Resource Negotiator)의 등장

특징

  • JobTracker의 두 가지 중요한 부분의 책임 분리
    • ResourceManager
    • ApplicationMaster
  • 확장성 개선
  • 다양한 워크로드 지원
  • 클러스터 이용률 개선
  • 기존 맵리듀스 호환성 지원

YARN Architecture

Resource Manager : 모든 클러스트의 자원을 중재하는 역할을 한다. 플러그인 가능한 스케줄러와 클러스터 사용자의 잡을 관리하는 애플리케이션즈 매니저라는 두 부분으로 이루어져 있다.
NodeManager : 하둡 클러스트의 각 노드들을 관리한다. 역할은 리소스매니저에게 노드의 상태를 공유하고 애플리케이션 컨테이너의 라이프사이클을 관리감독 한다. 그리고 개별 컨테이너의 자원 사용율을 모니터링 하고 노드의 상태와 로그관리 등과 같은 역할을 수행한다.
App Master : 리소스매니저와 자원을 협력하여 태스크를 실행하고 모니터링을 한다. 리소스매니저에게 주기적으로 하트비트를 전송해서 애플리케이션의 상태를 갱신하는 역할을 수행한다.
Container : 단일노드에서 CPU Core, RAM Disk 등 물리적인 리소스의 단위를 얘기한다. 하나의 노드에 여러개의 컨테이너가 구성 될 수 있다.

MapReduce1 vs YARN 컴포넌트 비교

YARN 컴포넌트

Resource Manager

  • 클러스터 리소스를 중재하는 마스터
  • 주요 컴포넌트
    • Scheduler
      • FIFO
      • Capacity
      • Fair
    • Applications Manager
    • Node Manager
    • Application Master
    • Container

YARN 동작 방식

MapReduce 기초

MapReduce 란?

  • 2004년에서 구글에서 발표한 데이터 처리 알고리즘
  • Hadoop의 MapReduce는 구글에서 발표한 MapReduce 논문을 자바로 구현한 애플리케이션

MapReduce 용어

  • Job
    • 클라이언트가 수행하는 작업의 단위
  • Map task
  • Reduce task
  • InputSplit
    • 입력의 논리적인 단위
    • 매퍼의 입력으로 들어오는 데이터를 분할하는 방식을 제공

InputSplit vs Block

MapReduce Word Count

MapReduce 처리 과정

MapReduce 처리 과정

처리할려는 데이터가 HDFS상에 존재 하고, input Format을 통해 해당 파일을 읽어드린다
Input Format을 통해 입력 파일이 분할되는 방식인 InputSplit을 정의한다
파일로 부터 데이터를 읽어서 키 벨류 형태로 반환을 해서 매퍼에 입력으로 전달이 된다
Mapper에서는 사용자가 정리한 작업을 수행하고, 처리된 매퍼의 결과는 Combiner로 전달이 된다.
Combiner란 맵의 결과를 기준으로 리듀서에 전달하기 전에 미리 맵의 아웃풋을 처리하는 방법을 제공해준다. 그래서 로컬 리듀서라고도 한다.
Partitioner 를 통해 같은 키를 같는 데이터는 물리적으로 동일한 리듀서로 전달해주는 역할을 수행한다
Shuffling and Sorting : 셔플링은 맵의 결과를 리듀서로 전달하는 과정을 얘기하고 이 때 네트워크 트래핑이 발생한다. 그리고 Mapper로부터 받은 키를 기준으로 Sorting이 되서 리듀서에 전달이 되고 Sorting이 완료 된 후에는 리듀서로 데이터로 전달이 되서 리듀서에 대한 처리를 한다.
처리결과는 Output Format에 전달이 되서 Output Format에 맡게 결과가 출력이 된다

InputFormat

  • 입력 파일이 분할 되는 방식(InputSplit)
  • 읽는 방식(RecordReader)

InputFormat 종류

  • FileInputFormat
    • TextInputFormat
    • CombineFileInputFormat
    • KeyValueTextInputFormat
      • TextInputFormat과 비슷하지만 구분자 파일의 행에 구분자를 전달해줘서 그 구분자를 기준으로 키와 벨류가 전달이 되게한다.
    • SequenceFileInputFormat
      • 하둡에서 구현된 바이너리 파일 포맷인데 ?? 보다 처리속도가 빠르다
  • DBInputFormat
  • ....

SequenceFile

  • Hadoop에서 제공하는 Binary 파일 포맷
  • Key-Value pair로 구성
  • Binary로 저장되어 있어서 속도가 빠름
  • 압축에 따른 포맷
    • Uncompressed SequenceFile Format
    • Record-compressed SequenceFile Format
    • Block-compressed SequenceFile Format
  • 용도
    • 작은 파일들을 모아 SequenceFile로 묶어서 사용
    • 압축을 통해 shuffling의 트래픽 양을 줄이는데 사용

InputSplit

  • 맵의 입력으로 들어가는 데이터를 분할 하는 방식 정의

RecordReader

  • 스플릿으로 부터 데이터를 실제로 읽어들이는 역할

Mapper

  • 실제로 사용자가 구현한 비즈니스 로직이 처리되는 곳

Combiner

  • 맵리듀스 잡의 경우 맵의 결과가 셔플을 통해서 리듀스에게 전송하게 되는데 이때 네트워크 트래픽이 발생하게 되기때문에 맵과 리듀서 사이에 데이터 전송을 최소화하는것이 중요하다
  • 컴바이너는 맵의 결과를 추가적으로 처리해서 리듀서로 전송하는 데이터의 수를 줄여주는 역할
  • 그러나 컴바이너는 모든 잡에 적용 할 수 없기 때문에 어떤 맵 리듀서 잡 같은 경우에는 컴바이너가 사용되지 않을 수도 있다. 예를 들어 최대값, 최소값, 카운트 같은것을 찾을 때는 컴바이너가 적용하기 좋지만 평균값을 계산하는 것과 같은것에는 적용할 수 없다.

Partitioner

  • 맵의 결과를 어떤 리듀스에 전달할지 결정하기 위해 사용된다
  • 맵의 중간결과의 키 벨류 중에 키의 값을 중심으로 같은 키를 같는 데이터는 물리적으로 동일한 리듀서로 전송을 할 수 있도록 한다

Shuffling and Sorting

  • Shuffling은 맵의 중간 결과파일을 리듀서로 전달하는 과정을 얘기함
  • 전달할 데이터가 물리적으로 다른 서버에 존재하기 때문에 네트워크 트래픽이 발생한다.
  • 리듀서 작업이 실행되기 전에 전달받은 키를 기준으로 정렬을 수행한다
  • 정렬된 결과가 리듀서로 전달되게 된다.

Reducer

  • Reducer는 키 별로 정렬된 데이터를 가지고 사용자가 정의한 리듀서의 작업을 수행하게 된다
  • 맵리듀스에서 리듀서 함수를 상속해서 리듀서를 구현하게 된다

OutputFormat

  • FileOutputFormat
    • TextOutputFormat
    • LazyOutputFormat
    • SequenceFileOutputFormat
  • DBOutputFormat
  • ...

MapReduce 작동 방식

MapReduce Job 실행 분석

MapReduce Job 제출

MapReduce Job 초기화

MapReduce Task 할당

MapReduce Task 실행

MapReduce 진행 상황과 업데이트

MapReduce Job 완료

  • 마지막 태스크가 완료되면 AM이 Job상태를 성공으로 변경
  • 클라이언트에서 실행한 waitforCompletion 메서드가 반환
  • Job통계와 카운터와 같은 메시지를 출력
  • 히스토리 서버에 잡 정보 기록

0개의 댓글