YARN이란?
: Yet Another Resource Negotiator
Hadoop Docs : to split up the functionalities of resource management and job scheduling/monitoring into separate daemons
클라우데라 : resource management layer for the Apache Hadoop ecosystem
호튼웍스 : YARN is the prerequisite for Enterprise Hadoop, providing resource management and a central platform to deliver consistent operations, security, and data governance tools across Hadoop clusters
위 설명에서 공통적으로 나오는 단어가 Resource Management 라는 용어인데 이게 YARN 의 핵심기능이자 YARN 을 한 단어로 표현해주는 것 같다. 각 어플리케이션에 필요한 리소스를 할당하고 모니터링 해준다.
또한 YARN 이 보통 자랑하는게 Hadoop 1.x 버전에서는 Hadoop MR만 또는 MR API 를 사용한 Application 만 실행할수 있었지만 YARN 은 MR 뿐 아니라 다양한 Application 을 지원해준다. 최근 트렌드인 Spark 도 YARN 위에서 돌릴수 있으니 말이다.
Hadoop이 2.0으로 올라오면서 크게 두가지 컴포넌트로 구성되었다. 하나는 파일을 분산 환경에 에서 쉽게 관리할수 있도록 도와주는 분산 파일 시스템인 HDFS(Hadoop Distributed File System)와 잡(Job)들의 분산 스케줄링을 관리하는 YARN(Yet Another Resource Negotiator) 이다. 이글에서는 HDFS 에 대한 내용은 최대한 배제하고 설명할 것이다.
Master / Worker 클러스터
Hadoop 에는 2가지 컨셉의 호스트가 존재한다. Master 호스트와 Worker 호스트 이다. 마스터는 클라이언트로부터 잡을 요청받고 결과를 전달해주는 communication point 로서의 역할을 하는 호스트이다. Worker 호스트들은 Master 호스트로부터 working 해야할 내용을들 전달받아 처리하는 역할을 한다.
YARN 클러스터 (Master/ResourceManager, Worker/NodeManager)
Resource Manager : Master 호스트에서 뜨는 Daemon 으로서 client 와 통신하는 역할을 한다. 그리고 클러스터에 있는 Worker 호스트들의 Resource 를 트래킹하여 Job 실행에 필요한 Node Manager 들을 컨트롤 하는 역할을 한다.
Node Manager : Worker 호스트에 존재하는 Daemon 으로서 실제로 job 을 처리하고 결과를 전달해주는 역할을 한다.
Yarn 은 vcore 와 RAM 메모리를 중점적으로 트래킹 하는데,( 호튼웍스 블로그에 보면 추후에 Disk, Network I/O 상태, GPU etc... 체크할것 같다고 함 ) 위 그림에서와 같이 Worker 가 각각 1대당 vcores 를 64개, RAM 을 128GB 를 가지고, 이러한 Worker 호스트가 100대 존재한다면 각각의 Node Manager 를 통해 Resource Manager Daemon 은 현재 이 클러스터에 vcore 6400개 RAM 12800 GB 를 소유 하고 있음을 알 수 있게 된다.
지금 위 그림은 클러스터 내에서 어떠한 job 도 실행되지 않는 깨끗한 상태이지만 실제로 job 이 돌아가게 되면 Resource Manager 는 현재 Resource 가 남는 Worker 를 찾아 job 을 할당해 준다.
Container
Container 라고 하는것은 YARN 에서 쓰는 용어인데, 리소스를 점유하는 하나의 단위라고 생각하면 된다. job 의 요청이 여러개의 Map/Reduce Task 로 분리되어 Node Manager 에게 할당되면 Node Manager 는 그 요청을 처리하기 위해 하나의 Container 를 실행하게 된다. 이 Container 는 우측에서 보는거와 같이 CPU, RAM 등의 리소스를 점유하여 task 를 처리하게 된다. 뒤에가서 각각의 worker host 에서 container 들을 어떻게 스케줄링하여 사용하는지 자세히 알아보도록 하겠다.
여기서 잠깐!(용어 설명)
Task 란 Application 이 요청하는 하나의 job 을 실행하기 위해 이 job 을 여러개로 쪼갠것을 의미한다. Task 에는 Map Task와 Reduce Task 가 존재하고 이 Task 가 모두 실행되면 하나의 job 이 끝났다고 할 수 있다.
Running Process/ApplicationMaster
2. RM 은 Worker 호스트중에 하나를 골라 Container 를 생성한다. 그리고 그 Container 가 바로 Application Master ( 이건 AM 이라고 부르겟다 +_+) 이다. 즉, 아래 그림에서 최초에 생성된 Container 안에서 AM 이 실행된다.
3. AM 은 task 를 실행할 컨테이너를 RM 에게 요청하게 된다. 그럼 RM 은 유휴한 자원을 소유한 Work 호스트의 Node Manager 를 통해 task 를 실행할 Container 를 생성하게 되고 task 를 실행하는 Container 는 task 의 상태( status) 를 AM 에게 알려준다.
4. 모든 task가 종료되면 AM도 종료되고 클러스터에 할당된 컨테이너의 자원도 모두 de-allocated 된다. 그리고 Application client 도 종료된다.
Ideal YARN!!
But Realistic YARN Allocation....
HDFS DataNodes and the YARN NodeManagers run on the same set of Worker nodes in the cluster
yarn-default.xml
yarn.nodemanager.resource.memory-mb = 90000 yarn.nodemanager.resource.vcores = 60
결론
참고 사이트
https://ko.hortonworks.com/blog/apache-hadoop-yarn-concepts-and-applications/
http://blog.cloudera.com/blog/2015/09/untangling-apache-hadoop-yarn-part-1/
http://hadoop.apache.org/docs/r2.7.3/hadoop-yarn/hadoop-yarn-site/index.html
'YARN' 카테고리의 다른 글
3. YARN Resource Manager HA(High Availibility) (0) | 2017.03.21 |
---|---|
2. YARN Application 실행( CDH 를 이용하여 Local에 Spark on YARN 실행해보기 ) (0) | 2017.03.19 |
1. YARN Scheduler (0) | 2017.03.16 |