Application Interaction with the ResourceManager
일단 애플리케이션이 리소스매니저에서 클라이언트와 대응되는 서비스를 지나 시스템으로 발아들여지면 애플리케이션은 애플리케이션마스터 실행을 책임지는 리소스매니저의 내부 메커니즘을 거친다. 다음은 애플리케이션마스터가 시작되고 어떻게 리소스매니저와 애플리케이션마스터가 상호 작용하는지 설명한다.
ApplicationMasters Service
애플리케이션마스터 서비스 컴포넌트는 모든 애플리케이션마스터 요청에 응답한다. 애플리케이션마스터는 리소스매니저와 통신을 하기 위해 유일한 프로토콜인 애플리케이션마스터프로토콜(ApplicationMasterProtocol)을 구현하고, 다음과 같은 작업을 담당한다.
- 새로운 애플리케이션마스터를 등록한다.
- 종료되는 애플리케이션마스터의 요청을 종료하고 등록 해제한다.
- 유효한 애플리케이션마스터의 요청만 리소스매니저의 애플리케이션 개체에 전달하기 위해 다양한 애플리케이션마스터의 모든 요청을 인증한다.
- 실행 중인 모든 애플리케이션마스터 컨테이너의 할당과 취소 요청을 받고 그 요청을 비동기적 방식으로 얀스케쥴러(YarnScheduler)로 전달한다.
애플리케이션마스터서비스(ApplicationMasterService)에는 어느 시점이던 반드시 단 하나의 애플리케이션 마스터 스레드만이 리소스매니저에 요청할 수 있게 해주는 추가적인 로직이 하나 있다. 애플리케이션마스터의 모든 RPC는 리소스매니저에서 직렬화됨으로써 단 하나의 애플리케이션마스터 스레드만이 이런 요청을 할 것이다. 이 애플리케이션마스터서비스 컴포넌트는 다음에 설명할 애플리케이션마스터의 무결점 동작상태 모니터링과 밀접하게 동작한다.
ApplicationMaster Liveliness Monitor
살아있거나 죽었거나 응답이 없는 애플리케이션마스터의 목록을 관리하기 위해 이 모니터는 각 애플리케이션마스터와 마지막 하트비트 시간을 지속적으로 추적한다. 리소스매니저는 임의의 애플리케이션마스터가 기본적으로 설정된 10분의 인터벌내에 하트비트를 발생하지 않으면 동작하지 않는 것으로 간주해 종료시킨다. 종료된 애플리케이션마스터에 대해 실행 중이거나 할당된 모든 컨테이너는 죽은 것(dead)으로 표시된다. 리소스매니저는 새로운 컨테이너에 새로운 애플리케이션 시도(Application Attempt)를 실행하기 위해 동일한 애플리케이션을 다시 스케쥴링하며, 기본적으로 최대 두번의 시도를 한다.