YARN(Yet Another resource Negotiator)

반응형

YARN (Yet Another Resource Negotiator) 개요

¤ YARN?

- YARN은 하둡 클러스터 자원 관리 시스템이다

- YARN은 맵리듀스의 성능을 높이기 위해 하둡2 에서 처음 도입되었다. (최초 도입 이유)

- YARN은 맵리듀스뿐만 아니라 다른 분산 컴퓨팅 도구도 지원한다. (현재 발전 방향)

¤ YARN 어떻게 사용 하는가?

- YARN은 클러스터의 자원을 요청/사용 하기 위한 API를 제공. But 사용자 코드에서 직접 이러한 API를 사용 할 수는 없다.

사용자는 YARN이 내장된 분산 컴퓨팅 프레임워크(엔진)에서 고수준 API를 작성/사용 할 수 있고,

- 따라서 사용자는 자원 관리의 자세한 내용은 알 수 없다.

¤ YARN 애플리케이션 전체 구조

YARN application 전체 구조

 

맵리듀스, 스파크 등과 같은 분산 컴퓨팅 프레임워크는 클러스터 계산 계층(YARN)클러스터 저장 계층(HDFS/HBASE) 위에서 YARN 애플리케이션을 실행한다. 위 그림을 보면 프레임워크 기반의 애플리케이션 계층이 존재하는 것을 알 수 있다.

피그, 하이브, 크런치와 같은 애플리케이션은 맵리듀스, 스파크, 테즈(일부 또는 모두) 에서 구동되는 처리 프레임워크의 예이며, YARN에 직접 접근하지 않는다.

(중요) Q. 분산 컴퓨팅 프레임워크와 처리 프레임워크(애플리케이션) 명확한 정의 및 구분

 

. YARN 애플리케이션 수행 해부해보기

Resource ManagerNode Manager, 두가지 유형의 장기 실행 데몬으로 핵심 서비스를 제공.

¤ Resource Manager

- Yarn 클러스터의 Master 서버로 한 곳에서 실행 (이중화가능)

- 클러스터 전체 자원의 사용량을 관리

- YARN 클러스터의 리소스를 사용하기 원하는 다른 플랫폼에서도 요청을 받아 자원 할당

¤ Node Manager

- YARN 클러스터의 Worker 서버로 모든 머신에서 실행

- 컨테이너를 구동하고 모니터링하는 역할

(자원-메모리/CPU-의 사용 한도를 가진 특정 애플리케이션 프로세스가 컨테이너에서 실행된다)

 

YARN이 애플리케이션을 구동하는 방식

1. YARN 애플리케이션 제출

클라이언트는 YARN에서 애플리케이션을 구동하기 위해 리소스 매니저에 접속하여 애플리케이션 마스터 프로세스의 구동을 요청한다.

(YARN은 각 컴퓨팅 클러스터를 애플리케이션이라고 하며 애플리케이션을 실행하기 위해 필요한 Master 서버를 애플리케이션마스터라고 한다. 따라서 기존의 JobTrackerYARN 입장에서 보면 MR을 실행하기 위한 애플리케이션 마스터이다.)

¤ 2a. 컨테이너 시작하기/ 2b. 구동:

리소스 매니저는 컨테이너에서 애플리케이션 마스터를 시작할 수 있는 노드 매니저를 하나 찾는다.

(클러스터 외부나 클라이언트의 JVM에서 해당 클라이언트의 애플리케이션 마스터를 구동하는 것도 가능하며, 이를 비관리 애플리케이션 마스터라고 부른다.)

¤ 애플리케이션 마스터가 몇 번 실행될지는 애플리케이션에 따라 다르며, 단순한 계산을 단일 컨테이너에서 수행하고 그 결과를 클라이언트에 반환한 후 종료 되거나 리소스 매니저에 더 많은 컨테이너를 요청 (3. 리소스 할당(하트비트))한 후 분산 처리를 수행 (4a. 컨테이너 시작하기/ 4b. 구동)하기도 한다.

¤ YARN 자체는 클라이언트, 마스터, 프로세스와 같은 애플리케이션이 서로 통신하는 기능은 제공하지 않는다.

¤ 대부분의 YARN 애플리케이션은 하둡 RPC와 같은 원격 호출 방식을 이용하여 상태변경 전달 및 결과를 받음

 

 

YARN의 자원 요청 (유연한 자원 요청 모델)

 

¤ 다수의 컨테이너를 요청할 때는 각 컨테이너에 필요한 자원(메모리, CPU)의 용량뿐만 아니라 해당 요청에 대한 컨테이너의 지역성 제약도 표현할 수 있다. (Q. 컨테이너의 지역성 제약이란?)

¤ 분산 데이터 처리 알고리즘에서 클러스터의 네트워크 대역폭을 효율적으로 활용하기 위해서는 지역성을 보장하는 것이 가장 중요하다. (data locality)

따라서 YARN은 특정 애플리케이션이 호출한 컨테이너에 대해 지역성 제약을 규정하는 것을 허용한다.

지역성 제약은 특정 노드나 랙 또는 클러스터의 다른 곳(외부 랙)에서 컨테이너를 요청할 때 사용 된다.

가끔은 지역성 제약이 불가능할 때, 컨테이너 할당 실패 or 선택적으로 제약을 조금 느슨하게 적용이 가능하며,

예로는 특정 노드에 요청을 했는데 그 노드에서 컨테이너를 시작할 수 없으면(현재 다른 컨테이너가 실행되고 있기 떄문)

YARN은 동일한 랙의 다른 노드에서 컨테이너를 시작하려 시도하고, 또 실패하면 클러스터 임의 노드에서 다시 시작한다.

이것은 맵리듀스의 맵 테스크가 데이터 지역성을 위해 (데이터 로컬 -> 랙 로컬 -> 외부 랙) 데이터를 찾아 실행되는 로직과 비슷하다.

¤ YARN 애플리케이션은 실행 중에는 아무 때나 자원 요청을 할 수 있다. 애플리케이션에서 처음 모든 요청을 하거나 유동적인 접근이 필요한 경우에는 애플리케이션의 요구에 따라 동적으로 자원을 추가로 요청 할 수 있다.

반응형

'Hadoop' 카테고리의 다른 글

YARN #2  (0) 2021.03.01
분산시스템의 비즈니스 이용  (0) 2021.02.20
빅데이터의 취급하기 어려운 점을 극복한 두가지 기술  (0) 2021.02.09

댓글

Designed by JB FACTORY