YARN(Yet Another Resource Negotiator)
이번에는 HADOOP의 또다른 주요 컴포넌트 중 하나인 YARN
에 대해 포스팅하도록 하겠습니다 YARN은 HADOOP 2에서 부터 도입되어 Resource-Manager의 역할을 하고 있습니다.
MapReduce 1.0 에서는 MasterNode 의 역할을 JobTracker 에서 담당합니다. Client가 JobTracker에 작업을 제출하면, TaskTracker에 자원을 할당해 줍니다.
이 방식에서는 JobTracker가 다음의 모든 업무를 담당합니다.
- 리소스 매니징
- 스케줄링
- 테스크 모니터링
따라서 위 문제들로 인해
- JobTracker를 확장하는데 있어 병목이 되었고
- 신뢰성과 가용성 문제
- 맵리듀스 프로그래밍 모델만 지원
- 클러스터 이용률 문제
이러한 문제를 해결하기 위해 Yarn이 등장하였습니다.
기존의 JobTracker의 책임을 ResourceManager, ApplicationMaster로 분리하여 관리 (기존의 맵리듀스는 맵슬롯, 리듀스 슬롯으로 자원을 관리하였으나 (정적 할당이였으며 맵슬롯 <-> 리듀스슬롯간 호환도 불가능했음), ResourceManager는 CPU,Memory,Network,Disk 같은 자원들을
Resource Container
라는 단위로 추상화하여 자원을 배분한다.) -> 이런 방식으로 클러스터 이용률을 개선함HADOOP2에서는 맵리듀스 뿐 아니라 Spark, Flink 등등의 Job도 실행 가능하게 됨
YARN Architecture
- Resource Manager : 모든 클러스터의 자원을 중재하는 역할을 한다.
- scheduler
- applications manager
- Node Manager : 하둡 클러스터의 각 노드들을 관리한다.
- ResourceManager에 노드의 상태를 공유하고, Application Container의 라이프사이클을 관리감독한다.
Application Master : ResourceManager와 자원을 협력하여 Task를 실행하고 모니터링 한다. ResourceManager에 주기적으로 하트비트를 전송한다.
- Application Container : 단일노드에서 CPU, RAM, Disk등 물리적인 리소스의 단위를 의미한다. (하나의 노드에 여러 컨테이너가 존재할 수 있다.)
MapReduce 1과 YARN
jobtracker <-> ResourceManager, ApplicationMaster, TimelineServer(완료된 Job에 대한 이력관리) taskTracker <-> NodeManager slot(리소스 단위) <-> Container
YARN Component
- Resource Manager : 클러스터의 리소스를 중재하는 마스터 역할을 수행함
- scheduler :
- FIFO-scheduler(작은 클러스터에 적당함)
- Capacity-scheduler(관리자가 각 큐마다 필요한 최소한의 자원의 양을 지정해 줄 수 있음)
- Fair-scheduler 모든 Application이 시간이 지남에 따라 균등하게 자원을 배분해서 application에 할당한다. - applications manager : 제출된 다수의 app의 유지를 책임진다.
- NodeManager : Node를 관리한다.
- 시작할 ResouceManager에 등록되고, Node의 상태를 HeartBeat으로 보내게 된다. 주요 목적은 ResourceManager가 NodeManager 에 할당한 Application Container를 관리하는 것이다.
- Container의 자원사용량을 모니터링한다.
- Application Master : 클러스터의 Application(사용자가 제출한 단일작업) 실행을 조종한다. 각 APplication마다 고유한 Master가 존재한다.
- ResourceManager와 자원을 협상한다.
- Container :단일노드의 자원을 의미한다. MapReduce 1과는 다르게 동적으로 할당이 가능하게 되었고 유연하게 배치가 가능해졌다.
YARN 동작방식
- 클라이언트로 부터 Job Application의 제출이 요청
- ResourceManager의 ApplicationsManager가 이를 받아서 최초의 ApplicationMaster를 위한 컨테이너 할당을 요청
- ApplicationMaster는 이를 받아서 Scheduler에게 할당을 요청
- Scheduler는 이를 스케줄링하여 노드의 상태에 따라 Container를 할당해 준다.
- WorkerNode에서 Container를 생성하는 것은 각각의 NodeManager가 담당한다.
- Container는 리소스를 활용하여 Application을 실행한다.
- ApplicationMaster는 이를 모니터링하며 Container들의 상태를 추적한다.
- 실행이 종료되면 ApplicationManager에 실행이 종료되었음을 알린다.