Home to be continue... YARN
Post
Cancel

to be continue... YARN

YARN(Yet Another Resource Negotiator)

이번에는 HADOOP의 또다른 주요 컴포넌트 중 하나인 YARN에 대해 포스팅하도록 하겠습니다 YARN은 HADOOP 2에서 부터 도입되어 Resource-Manager의 역할을 하고 있습니다.

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

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

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

따라서 위 문제들로 인해

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

이러한 문제를 해결하기 위해 Yarn이 등장하였습니다.

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

  2. HADOOP2에서는 맵리듀스 뿐 아니라 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

jobtracker <-> ResourceManager, ApplicationMaster, TimelineServer(완료된 Job에 대한 이력관리) taskTracker <-> NodeManager slot(리소스 단위) <-> Container

YARN Component

  1. Resource Manager : 클러스터의 리소스를 중재하는 마스터 역할을 수행함
    • scheduler :
    • FIFO-scheduler(작은 클러스터에 적당함)
    • Capacity-scheduler(관리자가 각 큐마다 필요한 최소한의 자원의 양을 지정해 줄 수 있음)
    • Fair-scheduler 모든 Application이 시간이 지남에 따라 균등하게 자원을 배분해서 application에 할당한다. - applications manager : 제출된 다수의 app의 유지를 책임진다.
  2. NodeManager : Node를 관리한다.
    • 시작할 ResouceManager에 등록되고, 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에 실행이 종료되었음을 알린다.
This post is licensed under CC BY 4.0 by the author.