1. ResourceManager

  • Application의 요구와 스케줄링의 우선순위, 자원의 가용성에 따라 ResourceManager가 특정 노드에서 실행되는 Application에 Resource Container를 동적으로 할당하는 역할
  • 모든 클러스터의 자원을 중재함
    • 노드의 자원을 관리하고 AM으로부터 컨테이너 요청을 받음
    • 자원에 대한 교섭을 진행하고 NM과 함께 컨테이너의 시작, 모니터링, 중지를 담당

1.1 Scheduler

  • NodeManager들의 자원 상태를 관리하며 부족한 Resource를 배정
  • 프로그램의 상태를 검사하거나 모니터링 하지 않고, 순순히 스케쥴링만 수행

  • 자원 상태에 따라서 태스크들의 실행 여부를 허가하는 역할
  • 즉, 프로그램 오류나 하드웨어의 오류로 문제가 발생하더라도 재 시작시켜주지 않고 프로그램에서 요구하는 리소스 ( CPU,Memory )에 관련된 기능만 처리

1.2 ApplicationManager

  • nodeManager에서 특정 작업을 위해 ApplicationMaster를 실행하고, ApplicationMaster의 상태 관리

1.3 ResourceTracker

  • Container가 아직 살아 있는지 확인하기 위해 ApplicationMaster의 재 시도 횟수,
  • nodeManager가 죽은 것으로 간주 할 때까지 얼마나 기다려야하는지 등의 설정 정보 확인

2. NodeManger

  • Container의 Lifecycle 관리 감독
  • RM을 최신 상태로 유지하며, 노드의 상태를 추적함
  • JAR, Library 등의 로컬파일시스템의 분산 캐시를 관리
  • Container가 생성한 로그를 관리

3. ApplicationMaster

  • 사용자 Job의 Lifecycle을 관리함
    • 하나의 Application의 마스터 역할
  • 스케줄러의 자원 요청을 교섭
    • RM의 Scheduler로 부터 적절한 Container 할당 받고 application의 실행 상태를 모니터링하고 관리
    • 주기적으로 ResourceManager 상태 보고
  • 스케줄러의 자원 요청을 교섭 및 NM과 협력해 컨테이너를 시작, 종료
    • 프레임워크 라이브러리 인스턴스 Application별 스케줄링과 모니터
    • ResourceManager로부터 자원의 교섭을 책임지고, Container를 실행하고 모니터링하는 nodeManager와 함께 작동

4. Container

  • CPU, Memory, Disk 같은 자원의 논리적 집합
  • 모든 Job은 여러 개의 태스크로 세분화되며, 각 태스크는 하나의 Container안에서 실행
  • 필요한 자원( resourceRequest)은 ApplicationMaster가 담당하고, 승인 여부는 ResourceManager가 담당

Application 실행 과정

  1. Client는 ApplicationMaster 자체를 실행하는 필요한 데이터를 포함한 Application 제출
  2. ResourceManager는 Container할당을 책임지는 ApplicationMaster 실행
  3. ApplicationMaster가 ResourceManager에 등록되고, Client가 ResourceManager와 통신 가능
  4. ApplicationMaster는 resourceRequest를 통해 적절한 resource의 Container 요청
  5. Container 성공적으로 할당되면, ApplicationMaster는 Container 실행 스펙을 NodeManager에게 제공하여 Container 실행.
  6. 실행 스펙은 Container가 ApplicationMaster 그 자체와 통신하기위한 정보 포함
  7. Application 코드는 Container에서 실행되고 진행률, 상태 등의 정보를 ApplicationMaster에게 제공
  8. Application 실행 중 client는 상태, 진행률을 얻기위해 ApplicationMaster와 직접 통신
  9. Application이 완료되고, 모든 필요한 작업이 종료되면, ApplicationMaster는 ResourceManager로의 등록을 해제하고 자신의 Container를 다른 용도로 사용할 수 있게 종료