시작하며

HADOOP의 또 다른 주요 컴포넌트 중 하나인 YARN(Yet Another Resource Negotiator)에 대해 정리한다. YARN은 HADOOP 2에서부터 도입되어 Resource Manager의 역할을 담당하고 있다.

MapReduce 1.0에서는 MasterNode의 역할을 JobTracker가 담당한다. Client가 JobTracker에 작업을 제출하면, JobTracker는 TaskTracker에 자원을 할당해 준다.

이 방식에서는 JobTracker가 다음의 모든 업무를 담당한다.

  1. 리소스 매니징
  2. 스케줄링
  3. 태스크 모니터링

따라서 위 문제들로 인해 다음과 같은 단점이 발생했다.

  1. JobTracker를 확장하는데 있어 병목이 발생한다.
  2. 신뢰성과 가용성 문제가 존재한다.
  3. 맵리듀스 프로그래밍 모델만 지원한다.
  4. 클러스터 이용률 문제가 있다.

이러한 문제를 해결하기 위해 YARN이 등장했다.

YARN 구성요소와 동작방식

YARN 도입의 개선점

  1. 기존 JobTracker의 책임을 ResourceManager, ApplicationMaster로 분리하여 관리한다. 기존 맵리듀스는 맵 슬롯, 리듀스 슬롯으로 자원을 정적으로 관리했으며 슬롯 간 호환도 불가능했다. ResourceManager는 CPU, Memory, Network, Disk 같은 자원들을 Resource Container라는 단위로 추상화하여 자원을 배분한다. 이런 방식으로 클러스터 이용률을 개선한다.

  2. HADOOP 2에서는 맵리듀스뿐 아니라 Spark, Flink 등의 Job도 실행 가능하게 되었다.

YARN Architecture

  1. Resource Manager : 모든 클러스터의 자원을 중재하는 역할을 한다.

    • scheduler
    • applications manager
  2. Node Manager : 하둡 클러스터의 각 노드들을 관리한다.

    • ResourceManager에 노드의 상태를 공유하고, Application Container의 라이프사이클을 관리감독한다.
  3. Application Master : ResourceManager와 자원을 협력하여 Task를 실행하고 모니터링한다. ResourceManager에 주기적으로 하트비트를 전송한다.

  4. Application Container : 단일 노드에서 CPU, RAM, Disk 등 물리적인 리소스의 단위를 의미한다. (하나의 노드에 여러 컨테이너가 존재할 수 있다.)

MapReduce 1과 YARN 비교

MapReduce 1YARN
jobtrackerResourceManager + ApplicationMaster + TimelineServer
taskTrackerNodeManager
slot(리소스 단위)Container

YARN Component 상세

  1. Resource Manager : 클러스터의 리소스를 중재하는 마스터 역할을 수행한다.

    • FIFO-scheduler : 작은 클러스터에 적합하다.
    • Capacity-scheduler : 관리자가 각 큐마다 필요한 최소한의 자원의 양을 지정해 줄 수 있다.
    • Fair-scheduler : 모든 Application이 시간이 지남에 따라 균등하게 자원을 배분하여 application에 할당한다.
    • applications manager : 제출된 다수의 app의 유지를 책임진다.
  2. NodeManager : Node를 관리한다.

    • 시작 시 ResourceManager에 등록되고, Node의 상태를 HeartBeat으로 보낸다. 주요 목적은 ResourceManager가 NodeManager에 할당한 Application Container를 관리하는 것이다.
    • Container의 자원사용량을 모니터링한다.
  3. Application Master : 클러스터의 Application(사용자가 제출한 단일 작업) 실행을 조종한다. 각 Application마다 고유한 Master가 존재한다.

    • ResourceManager와 자원을 협상한다.
  4. Container : 단일 노드의 자원을 의미한다. MapReduce 1과는 다르게 동적으로 할당이 가능하고 유연하게 배치가 가능해졌다.

YARN 동작방식

  1. 클라이언트로부터 Job Application의 제출이 요청된다.
  2. ResourceManager의 ApplicationsManager가 이를 받아서 최초의 ApplicationMaster를 위한 컨테이너 할당을 요청한다.
  3. ApplicationMaster는 이를 받아서 Scheduler에게 할당을 요청한다.
  4. Scheduler는 이를 스케줄링하여 노드의 상태에 따라 Container를 할당해 준다.
  5. WorkerNode에서 Container를 생성하는 것은 각각의 NodeManager가 담당한다.
  6. Container는 리소스를 활용하여 Application을 실행한다.
  7. ApplicationMaster는 이를 모니터링하며 Container들의 상태를 추적한다.
  8. 실행이 종료되면 ApplicationManager에 실행이 종료되었음을 알린다.

정리하며

YARN은 MapReduce 1의 JobTracker 집중화 문제를 해결하기 위해 등장한 범용 자원 관리 프레임워크다. ResourceManager, NodeManager, ApplicationMaster, Container라는 네 가지 핵심 컴포넌트로 책임을 분리함으로써 클러스터 이용률을 높이고, MapReduce 외에도 Spark, Flink 등 다양한 분산 처리 프레임워크를 지원할 수 있는 기반을 마련했다.