Programming/Java

YARN Distributed Shell Application - ApplicationMaster - 주석

라우드니스 2015. 3. 23. 21:28

Comment

YARN framework을 사용하여 실행된 container들의 모음에서 shell command를 실행하는 ApplicationMaster이다.


이 class는 어떻게 yarn 기반의 application master들을 작성하는지에 대한 예제의 역할도 뜻한다.


ApplicationMaster는 ResourceManager의 launcher에 의해서 container에서 실행된다. ApplicationMaster가 하기를 요구하는 것 중 첫번째 것은 스스로 ResourceManager에 연결하고 등록하는 것이다. 등록은 ResourceManager 안에 ApplicationMaster가 listening할 host:port에 관련된 정보를 설정하는것으로 이것들은 client에게 url을 tracking하는것과 마찬가지로 어떠한 기능적인 것들을 제공하고 필요하다면 client는 status나 job history의 유지를 사용할수도 있다. 그러나, distributedshell 에서는, trackingurl과 appMasterHost:appMasterRpcPort는 지원하지 않는다.


ApplicationMaster는 ResourceManager에게 자신이 최신이고 살아있다는것을 알려주기 위하여 정기적으로 heartbeat를 보내는것을 요구한다. ApplicationMaster로부터 ResourceManager에게 향하는 ApplicationMasterProtocol의 allocate method는 heartbeat로의 역할을 한다.


job을 실제로 다루기 위하여, ApplicationMaster는 ResourceRequest를 node location, computational (memory/disk/cpu) resource requirements 등과 같은 resource specification과 container들의 수를 ResourceManager에게 AllocateRequest를 통하여 요청한다. ResourceManager는 AllocateResponse와 함께 ApplicationMaster에게 반응하는데 이것은 현재 이용가능한 자원상태와 마찬가지로 새롭게 할당된 container들과 완료된 container들의 모음이다.


각각의 할당된 container를 위해서, ApplicationMaster는 ContainerLaunchContext를 통해서 할당된 container id, 실행파일이 요구하는 local resource, 실행을 위해 설정된 environment, 실행할 command, 기타 등등을 구체화하여 실행헤 필요한 context를 설정한다. 그리고 StartContainerRequest를 ContainerManagementProtocol에 제출하여 주어진 할당된 container에서 정의된 command들을 launch하고 execute한다.


ApplicationMonitor는 종료된 container들의 update를 얻기 위한 ApplicationMasterProtocol의 allocate를 이용해서 ResourceManager에게 querying을 하거나 할당된 container의 ContainerId의 상태를 querying함으로써 ContainerManagementProtocol을 통하여 실행된 container를 감시할 수 있다.


 job이 종료된 후, ApplicationMaster는 FinishApplicationMasterRequest를 ResourceManager에게 보내어 ApplicationMaster가 종료 됐다는것을 알린다.

반응형