Taaewoo
Data Engineering Blog
Taaewoo
전체 방문자
오늘
어제
  • 분류 전체보기 (67)
    • Computer Science (16)
      • Algorithm (6)
      • OS (1)
      • Java (2)
      • C++ (6)
      • Python (1)
    • Hadoop Ecosystem (27)
      • Hadoop (6)
      • Spark (5)
      • NiFi (6)
      • Hive (9)
      • Kafka (1)
    • BigData Engineering (14)
      • Jupyter (1)
      • Docker (3)
      • CDH (3)
      • Riot Data Pipeline (7)
    • Back-end 개발 (0)
      • Spring (0)
    • Algorithm 문제 풀이 (9)
      • 백준 (5)
      • LeetCode (4)
    • Conference (1)
      • LINE DEVELOPER DAY 2021 (1)
      • if(kakao) 2021 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • sort
  • kafka
  • 알고리즘
  • 빅데이터
  • docker
  • Coding
  • Hive
  • java
  • 코딩
  • algorithm
  • 프로그래밍
  • CS
  • hdfs
  • BigData
  • hadoop
  • NiFi
  • C++
  • spark
  • metastore
  • 정렬

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Taaewoo

Data Engineering Blog

[Hadoop] YARN Capacity scheduler 특징 및 Queue 옵션
Hadoop Ecosystem/Hadoop

[Hadoop] YARN Capacity scheduler 특징 및 Queue 옵션

2022. 4. 22. 03:06

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

https://wikidocs.net/35456

 

저작자표시 비영리 (새창열림)

'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
    'Hadoop Ecosystem/Hadoop' 카테고리의 다른 글
    • [HDFS] JMX Metrics 값 불러오기
    • [Hadoop] HDFS NameNode의 Metadata 관리와 Failover 상세 과정
    • [Hadoop] YARN - Yet Another Resource Negotiator
    • [Hadoop] MapReduce - Simplified Data Processing on Large Clusters
    Taaewoo
    Taaewoo

    티스토리툴바