YARN Scheduler란
YARN Scheduler란 할당시킬 리소스를 결정하는 알고리즘으로써 다양한 설정 값들을 통해 클러스터의 리소스를 효율적으로 사용할 수 있습니다. YARN은 기본적으로 Hadoop 플랫폼에서 작동하는 어플리케이션에 리소스를 할당시키고 관리하는 역할을 맡고 있습니다. 어플리케이션이 제출되어 AM( Application Master )가 생성되면 아래 그림과 같은 절차가 진행됩니다. 이 때 AM이 RM( ResourceManager )에게 리소스 요청을 하면 RM은 Scheduler를 통해 할당시킬 리소스의 양을 결정합니다.
YARN Scheduler 종류
Scheduler의 종류로는 아래 3가지가 존재합니다. 이 중 Capacity scheduler가 기본 default 값으로 설정되어 있습니다. Fair scheduler가 따로 존재하지만 이번 글에서 다룰 Capacity scheduler를 사용하더라도, 어플리케이션을 Fair와 비슷하게 리소스 할당을 받을 수 있습니다.
FIFO scheduler
Fair scheduler
Capacity scheduler
Capacity Scheduler의 특징
Capacity scheduler은 기본적으로 Queue라는 것을 사용하여 Queue마다 리소스에 대한 설정을 할 수 있습니다. Capacity scheduler는 아래와 같은 특징들을 가지고 있습니다.
Hierarchical Design of Queue
- root부터 시작하는 계층 구조의 Queue를 사용
- 각 Queue마다 부모 Queue를 기준으로 min, max capacity를 설정 가능
- 분기된 leaf queue들은 min capacity의 합이 100이 되어야함.
- 해당 Queue는 자신의 capacity 뿐만 아니라, 다른 Queue의 남는 리소스를 사용 가능.
( Queue Elasticity )
A.capacity가 20%, B.capacity가 80% 일 때, B의 사용량이 현재 없다면 A가 100% 사용 가능.
- 옵션 설정 방법
Property | 비고 |
yarn.scheduler.capacity.root.queues | root Queue 하위에 생성할 Queue 리스트. |
yarn.scheduler.capacity.root.{Queue 이름}.queues | 특정 Queue의 하위 Queue 리스트. |
yarn.scheduler.capacity.root.{Queue 이름}.capactiy | 특정 Queue의 capacity로써 minimum capacity. |
yarn.scheduler.capacity.root.{Queue 이름}.maximum-capactiy | 특정 Queue의 최대 capacity. |
Minimum User Percentage and User Limit Factor
- 사용자에게 할당되는 리소스를 컨트롤 할 수 있는 설정
- Min User Percentage는 다수의 사용자가 리소스를 사용할 때 보장받을 수 있는 최소 리소스
- 10%의 설정 값이라면, 10명의 사용자가 있을 때 각 사용자는 10% 사용 가능함.
- 최소 값 설정이므로, 남는 리소스가 있다면 더 할당 받을 수 있음.
- User Limit Factor는 사용자 한명이 사용할 수 있는 최대 리소스 양.
- Min Capacity의 곱으로 계산됨.
- Min Capactiy가 10%이고 User Limit Factor가 3의 설정 값이라면, 사용자 한명이 30% 사용 가능.
- 옵션 설정 방법
Property | 비고 |
yarn.scheduler.capacity.root.{Queue 이름}.user-limit-factor | 특정 Queue의 user limit factor. |
yarn.scheduler.capacity.root.{Queue 이름}.minimum-user-limit-percent | 특정 Queue에서 사용자가 보장 받을 수 있는 최소 capacity percent |
기타 옵션
Property | 비고 |
yarn.scheduler.capacity.maximum-am-resource-percent | AM에 할당시키는 최대 리소스 양으로써 AM에 할당되는 리소스가 많을수록 job을 수행하는 container의 리소스가 줄어든다. |
yarn.scheduler.capacity.{Queue 이름}.maximum-am-resource-percent | 특정 Queue의 AM에 할당시키는 최대 리소스 |
특정 사용자 및 컴포넌트에 Queue 할당 방법
위에서 지정했던 Capacity scheduler의 설정 값들은 Queue가 기준이였습니다. 그래서 특정 사용자 또는 Hive, Spark 같은 빅데이터 컴포넌트에 대해서 직접적인 Queue 할당을 할 수 없었습니다. 하지만 아래의 방법들을 통해 가능합니다.
사용자 별로 Queue 할당
- 특정 사용자 이름과 Queue의 이름을 명시하여 1:1 mapping 시킬 수 있음.
- 사용자뿐만 아니라 특정 그룹과의 Queue의 mapping도 가능.
- 사용자와 Queue가 많아 모든 mapping들을 명시할 수 없을 때, 사용자 또는 그룹명의 Queue에 자동으로
mapping 가능.
- 옵션 설정 방법
Property | 설정 값 | 비고 |
u:{사용자 이름}:{Queue 이름} | 특정 사용자를 특정 Queue에 mapping | |
yarn.scheduler.capacity .queue-mappings |
g:{그룹 이름}:{Queue 이름} | 특정 그룹을 특정 Queue에 mapping |
u:%user.%user | 사용자들을 각 사용자 이름과 동일한 Queue에 mapping | |
g:%user.%primary_group | 사용자들을 각 사용자가 속한 그룹과 이름이 동일한 Queue에 mapping |
컴포넌트 별로 Queue 할당
- MapReduec, Spark, Hive와 같은 빅데이터 컴포넌트 별로 특정 Queue 할당이 가능.
Type | Queue 할당 방법 |
MapReduce |
MR 실행 시 "-D mapreduce.job.queuename={Queue 이름}" 옵션으로 Queue 이름 명시 |
Spark | spark-submit 명령어 수행 시 "-queue {Queue 이름}" 옵션으로 Queue 이름 명시 |
Hive | HQL 사용 시 "set {엔진 이름}.queue.name={Queue 이름}" 명령어로 Queue 이름 명시 |
- Hive는 엔진 설정으로 Tez나 MR을 사용할 수 있기 때문에 원하는 엔진을 명시.
References
https://blog.cloudera.com/yarn-capacity-scheduler/
https://blog.cloudera.com/better-slas-via-resource-preemption-in-yarns-capacityscheduler/
https://www.youtube.com/watch?v=d6Z--cIOfuw
'Hadoop Ecosystem > Hadoop' 카테고리의 다른 글
[HDFS] JMX Metrics 값 불러오기 (0) | 2023.04.02 |
---|---|
[Hadoop] HDFS NameNode의 Metadata 관리와 Failover 상세 과정 (0) | 2022.02.15 |
[Hadoop] YARN - Yet Another Resource Negotiator (0) | 2021.06.12 |
[Hadoop] MapReduce - Simplified Data Processing on Large Clusters (0) | 2021.03.25 |
[Hadoop] HDFS - The Hadoop Distributed File System (0) | 2021.03.14 |