ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • YARN(하둡분산자원관리) 실행 구조 및 흐름
    Data 2021. 1. 23. 10:41
    반응형

    하둡(Hadoop) 프로젝트의 YARN(Yet Another Resource Negotiaor) 모듈은 분산 환경에서의 자원관리를 담당합니다.

     

    이 글에서는 YARN과 관련해 다음과 같은 항목을 다룹니다:

     


    YARN에 Application 제출 시 일어나는 일들

    중앙의 리소스매니저는(ResourceManager) 특정 머신에 standalone 데몬으로 실행되며 자원을 차지하기 위해 경쟁하는 다양한 애플리케이션들의 중재자 역할을 합니다. 리소스매니저는 클러스터의 모든 자원을 관리하고 있기에 다수의 사용자 간의 fairness, capacity, locality를 제공할 수 있습니다. 애플리케이션의 요청에 따라서 우선순위와 가용 리소스를 스케쥴링하며 리소스매니저는 특정 노드에서 실행되기 이위한 컨테이너를 동적으로 할당합니다. 하나의 컨테이는 특정 노드에 속한 논리적인 리소스 묶음입니다. 

     

    위와 같은 일을 수행하기 위해 리소스매니저는 각 노드를 관리하는 시스템 데몬인 노드매니저와 협업합니다. 둘 간의 커뮤니케이션은 확장성을 위해 heartbeat을 기반으로 이루어져 있습니다. 

     

    노드매니저는 가용 리소스의 로컬 모니터링, 오류 리포팅, 컨테이너 라이프사이클 관리 등을 담당합니다. 그렇기에 리소스매니저는 클러스터 전역을 파악하기 위해 노드매니저에 의존합니다.

     

     

    1. Job 제출 및 애플리케이션마스터 생성

    public 프로토콜을 통해 리소스매니저에 제출된 사용자의 애플리케이션은 credentials이 적절한지와 같은 관리자 체크 단계를 거칩니다. 통과된 애플리케이션은 스케쥴러에 보내져 실행을 기다립니다. 스케쥴러가 해당 요청을 처리할 수 있는 리소스를 확보하게되면 그 애플리케이션은 Accepted 상태에서 Running 상태로 전이됩니다. 또한, 이렇게 전이되는 동시에 하나의 컨테이너를 애플리케이션마스터에 할당하고 클러스터 중 한 노드에 생성합니다. 주로 "container0"으로 불리는 애플리케이션마스터는 이 상태에서 다른 추가적인 리소스를 받지 않으며 이후 반드시 추가적인 컨테이너를 요청합니다.

     

    이러한 YARN의 모든 컨테이너(애플리케이션마스터도 포함)는, CLC(Container Launch Context)라는 정보로 나타내어집니다. 이 레코드는 환경변수 매핑과 remote 스토리지에 저장된 디펜던시,  security 토큰, 노드매니저서비스를 위한 payloads, 프로세스 생성을 위한 커맨드 등을 가지고 있습니다.

     

    애플리케이션마스터는 사용자 job의 마스터로 애플리케이션의 전반적인 라이프사이클을 관리합니다. 그러한 활동에는 동적으로 리소스 소비를 늘이거나 줄이는 일, 실행 흐름 관리, 실패나 컴퓨팅 skew 처리, 로컬에서의 최적화 등이 포함됩니다. 애플리케이션마스터는 사용자가 작성한 임의의코드를 실행하도록 설계되어서 리소스매니저, 노드매니저와의 커뮤니케이션은 확장가능한 네트워크 프로토콜을 통해 이뤄집니다(예로, protobuf).

     

    YARN은 애플리케이션마스터에 대한 제약을 거의 두지 않은 구조로 설계되어서, 이러한 모든 기능을 애플리케이션마스터가 처리하도록하여 뛰어난 확장성과 프로그래밍 모델에 대한 유연성을 이루었습니다. 

     

     

    YARN Architecture with clients - Image from Author inspired by [2]

     

    2. 추가적인 컨테이너 생성 및 실행

    애플리케이션마스터는 job을 수행하기 위해 여러 서버의 프로세싱 리소스를 사용하여야 합니다. 이것을 위해, 애플리케이션마스터는 리소스매니저에 리소스요청(위에서 언급된 CLC에 기반해)을 실행하며 그것에는 locality preferences, 컨테이너 특성 등에 대한 정보가 담겨있습니다. 하나의 애플리케이션마스터를 위해 리소스가 스케쥴되면 리소스매니저는 애플리케이션마스터의 heartbeat으로 유지되는 해당 리소스에 대한 lease를 생성합니다. 애플리케이션마스터가 노드매니저에게 컨테이너 lease를 제시할 때에는 토큰에 기반해 진행됩니다. 

     

    일반적으로 실행되는 컨테이너는 애플리케이션마스터와 커뮤니케이션하며 특정 애플리케이션을 위한 프로토콜을 이용해 상태나 이상유무를 리포트하거나 특정 프레임워크 전용 명령어를 받습니다. 

     

    3. 종료

    작업을 끝낸 애플리케이션마스터는 관련 정보가 모두 정리되기 위해서 리소스매니저에서 unregister되어야 합니다. 추가적으로, 프레임워크별로 완전히 종료되기 전에 리포팅 같은 실행이 존재할 수도 있습니다 [1]. 

     

    Reference
    [1] Apache Hadoop YARN: yet another resource negotiator

    [2] Apache Hadoop YARN: Moving beyond MapReduce and Batch Processing with Apache Hadoop 2

    반응형
Kaden Sungbin Cho