Yarn 은 cpu, memory 와 같은 computing resource 를 할당해주고 리소스의 사용을 관리하는 소프트웨어이다.
https://www.simplilearn.com/tutorials/hadoop-tutorial/yarn
yarn은 어플리케이션을 동작하기 위한 리소스를 프로비저닝 해주는 친구다.
HDFS는 redundant하고 reliable한 파일 스토리지를 제공하는 친구다.
Yarn 과 HDFS 자체는 완전히 독립적이다. HDFS는 Storage 기능을 제공하고, Yarn 은 application 을 구동하는 기능을 제공한다.
Yarn 의 Architecture 는 크게 3가지 역할을 하는 컴포넌트로 구성되어있다.
그림으로 보면 아래와 같다.
https://www.simplilearn.com/tutorials/hadoop-tutorial/yarn
Resource Manager (줄여서 RM이라고 부른다.)
요새는 primary라고 부르기도 함
통상 cluster 당 한개 존재한다.
master 서버의 역할이다.
data node 의 위치와 resource 의 양을 알고 있다. (Rack Awareness 포함)
RM은 내부적으로 여러개의 서비스로 구성되어있다. 가장 중요한 요소는 Scheduler 로 리소스 할당을 어떻게 할지를 결정한다.
Application Master 는 framework에 따라 구현하는 프로세스로, 하나의 어플리케이션이 리소스를 어떻게 사용할지 조정하는 역할을 한다.
Yarn에 제출되는 job 에서 가장 먼저 시작하는 container 이다.
각 Application Master는 RM으로부터 리소스를 요청하고, Node Manager 가 제공해준 container 와 함께 동작한다.
primary 입장에서 Node Manager는 Worker Node라고 볼 수 있다.
Node Manager 는 클러스터에 여러개 존재 가능하다. 인프라의 slave이다.
NM이 시작되면, RM에게 주기적으로 heart beat 를 전송해서 자신을 알린다.
NM은 클러스터에 리소스를 제공한다. NM이 관리하는 리소스 capacity는 v-core 수와 memory 양 이다.
런타임(클러스터가 실제로 잡(Job)이나 애플리케이션을 실행하고 있는 도중)에 Resource Scheduler 는 해당 capacity 를 어떻게 사용할지 결정한다.
컨테이너는 NodeManager capacity의 일부를 할당받아서 클라이언트가 제출한 프로그램을 실행하는 데 사용한다.
각 NM는 RM의 지시를 받아 해당 노드에 있는 컨테이너의 상태를 보고하고 관리한다.
Resource Manager는 Yarn 클러스터에서 이용가능한 리소스를 관리한다.
클러스터의 최대 utilization(=캐패시티) 하에서 요청된 어플리케이션들의 리소스를 관리한다.
RM은 pluggable 한 YarnScheduler 를 포함한다.
Yarn Scheduler 는 구현체(객체)마다 다른 정책을 가질 수 있다. capacity, faireness, SLA(service level agreements) 등.
RM 은 Scheduler 와 Application Manager 를 주요 컴포넌트로 가지고 있다.
pluggable한 YarnScheduler 란?
플러그인(plug-in)처럼 교체/확장 가능하다는 뜻으로
ResourceManager(RM) 안에 있는 YARN Scheduler는 고정된 하나의 방식만 쓰는 게 아니라, 원하는 정책의 구현체를 선택해서 “꽂아 쓸 수 있다”는 개념이다.
예시 : 기본적으로 YARN은 여러 종류의 스케줄러를 제공
Scheduler 는 다양한 어플리케이션에 리소스를 할당하는 책임을 가지고 있다. 리소스를 할당하는 데는 capacities, queue 등의 제약을 받는다.
Scheduler 는 어플리케이션의 상태를 모니터링하지 않는다. 또한 어플리케이션의 장애나 HW failure 에 의한 장애등에 의한 restart 등의 작업도 하지 않는다.
Scheduler 는 어플리케이션의 리소스 요구사항을 기반으로 한 기능만 수행한다.
스케줄러는 어플리케이션의 리소스 요구 사항에 따라 기능을 수행한다.
요구사항은 메모리, CPU, 디스크 및 네트워크와 같은 요소를 통합하는 리소스 컨테이너의 추상적인 개념을 기반으로 한다.
스케줄러에는 다양한 queue 와 어플리케이션 사이에 클러스터 리소스를 분배하는 역할을 하는 policy plugin이 있다.
플러스인의 예로는 Capacity Scheduler 및 Fair Scheduler 등이 있다.
Capacity Scheduler는 hierarchical queue 로 클러스터 리소스의 공유를 더 예측가능한 방식으로 할 수 있다.
Hierarchical Queue란?
root
├─ finance
│ ├─ payroll
│ └─ audit
└─ marketing
├─ ads
└─ social
Hierarchical Queue 장점
Capacity Scheduler와 연결
Application Manager(AM) 는 제출된 어플리케이션의 리스트를 관리하는 인터페이스이다.
AM은 Job의 제출을 받아주고, Application Master 가 뜰 첫번째 컨테이너를 선정하고, 실패(장애)에 대해 Application Master container를 재시작하는 역할을 한다.