Yarn?

  Hadoop 1.0에서는 JobTracker가 클러스터의 자원 배분과 Job관리를 함께 수행했기 때문에 JobTracker에서 병목현상이 일어났다. JobTracker가 하던 두 가지 역할-자원관리를 Resource Manager와 Application Master로 분리해서 JobTracker에 몰리던 병목을 제거했습니다. Resource Management, Scheduling/Monitoring을 구분하는 daemon의 기능을 분할하였습니다. global하게 ResourceManager, per-application ApplicationManager를 두자라는 아이디어에서 부터 시작했습니다. 범용 컴퓨팅 클러스터가 가능 (MapReduce)외에도 다양한 어플리케이션을 실행할 수 있으며, 어플리케이션 마다 자원(CPU, 메모리)을 할당 받는다. Hadoop 2.0의 Cluster Resource Management 플랫폼인 Yarn은 하둡 클러스터의 각 어플리케이션에 필요한 리소스를 할당하고, 모니터링하는 업무에 집중함으로써 다양한 어플리케이션이 하둡 클러스터들의 리소스를 공유할 수 있도록 하는 핵심 요소이다.

YARN의 Components



  • Resource Manager
  •   클러스터에 1개 존재하며, 클러스터의 전반적인 자원 관리와 태스크트들의 스케줄링을 담당한다 .클라이언트로부터 어플리케이션 실행요청을 받으면 그 어플리케이션의 실행을 책임질 Application Master를 실행한다. 또한 클러스터 내에 설치된 모든 Node Manager와 통신을 통해서 각 서버마다 할당된 자원과 사용중인 자원의 상황을 알 수 있으며, Application Master들과의 통신을 통해 필요한 자원이 무엇인지 알아내어 관리하게 된다. Resource Manager내부에는 여러개의 컴포넌트들이 존재하며, Scheduler, Application Manager, Resource Tracker 세개의 메인 컴포넌트가 있다.

    • Scheduler
    •   Node Manager들의 자원 상태를 관리하며 부족한 리소스들을 배정한다. 노드 당 1개가 있고, Scheduler는 프로그램의 상태를 검사하거나 모니터링하지 않으며, 순수하게 스케줄링 작업만 담당한다. 스케줄링이란 자원 상태에 따라서 태스크들의 실행 여부를 허가해주는 역할만 담당하며, 그 이상의 책임은 지지 않는다. 즉, 프로그램 오류나 하드웨어의 오류로 문제가 발생한 프로그램을 재 시작시켜주지 않으며, 프로그램에서 요구하는 리소스(CPU, Disk, 네트워크 등)에 관련된 기능만 처리한다. 노드 컨테이너의 자원 상태를 Resource Manager에게 통지한다.

    • Application Manager
    •   Node Manager에서 특정 작업을 위해서 Application Master를 실행하고, Application의 실행 상태를 관리하고 상태를 Resource Manager에게 통지한다. 여기서 Application Master라는 용어가 나오는데, YARN에서 실행되는 하나의 태스크를 관리하는 마스터 서버를 말한다. 어플리케이션 당 1개가 있다.

    • Resource Tracker
    •   Container가 아직 살아있는지 확인하기 위해서 Application Master재 시도 최대 횟수, 그리고 Node Manager가 죽은 것으로 간주 될 때까지 얼마나 기다려야 하는지 등과 같은 설정 정보를 가지고 있다.

  • Node Manager
  •   노드 당 한개씩 존재합니다. 해당 Container의 리소스 사용량을 모니터링하고, 관련 정보를 Resource Manager에게 알리는 역할을 담당합니다. Application Master와 Container로 구성되어 있습니다.

    • Application Master
    •   하나의 프로그램에 대한 마스터 역할을 수행하며, Scheduler로 부터 적절한 Container를 할당 받고, 프로그램 실행 상태를 모니터링하고 관리합니다.

    • Container
    •   CPU, 디스크(Disk), 메모리(Memory) 등과 같은 속성으로 정의된다. 이 속성은 그래프 처리(Graph processing)와 MPI와 같은 여러 응용 프로그램을 지원하는데 도움이 된다. 모든 작업은 결국 여러 개의 태스크로 세분화되며, 각 테스크는 하나의 Container 안에서 실행이 됩니다. 필요한 자원의 요청은 Application Master가 담당하며, 승인 여부는 Resource Manager가 담당합니다. Container안에서 실행할 수 있는 프로그램은 자바프로그램뿐만 아니라, 커맨드 라인에서 실행할 수 있는 프로그램이라면 모두 가능합니다.


Hadoop 2.0 동작 방식

  1. 클라이언트는 Application Master 자체를 실행하는 필요한 데이터를 포함하는 응용프로그램을 Resource Manager에게 제출
  2. Resource Manager는 Node Manager를 통해 Container 할당을 책임지는 Application Master를 시작
  3. Application Master가 Resource Manager에 등록되고, 클라이언트가 Resource Manager와 통신이 가능.
  4. Application Master는 resource-request 프로토콜을 통해 Resource Manager를 통해 적절한 리소스의 Container할당을 요청
  5. Container가 성공적으로 할당되면, Application Master는 실행 스펙을 Node Manager에게 제공하여, Container를 실행시킨다. 실행 스펙을 일반적으로 Container가 Application Master 그 자체와 통신하기 위해 필요한 정보를 포함
  6. 응용프로그램 코드는 Container에서 실행되고, 진행률, 상태 등의 정보를 응용프로그램-스펙 프로토콜을 통해 응용프로그램의 Application Master에 전송
  7. 응용프로그램 실행 중 클라이언트는 상태, 진행률 등을 얻기 위해 Application Master와 응용프로그램-스펙 프로토콜을 통해 직접 통신
  8. 일단 응용프로그램이 완료되고, 모든 필요한 작업이 종료되면, Application Master는 Resource Manager에서 등록된 자신을 제거하고, 자신의 컨테이너를 다른 용도로 사용이 가능하도록 종료


[참고] http://hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-site/YARN.html
[참고] http://www.edureka.co/blog/introduction-to-hadoop-2-0-and-advantages-of-hadoop-2-0/

+ Recent posts