Apache Hadoop YARN 아키텍처

Apache Hadoop YARN 아키텍처

YARN(Yet Another Resource Negotiator)은 자원 관리(resource management)와 작업 스케줄링·모니터링을 서로 다른 데몬으로 분리하는 데서 출발한 아이디어예요. 클러스터 전체의 자원을 중재하는 전역 ResourceManager, 노드마다 자원을 관리하는 NodeManager, 애플리케이션마다 실행을 이끄는 ApplicationMaster가 어떻게 역할을 나누는지 이 글에서 정리해볼게요.

출처: Apache Hadoop YARN (공식문서)

본문

역할 분담

YARN의 핵심 구조는 전역 ResourceManager(RM)애플리케이션별 ApplicationMaster(AM) 로 나뉘어요. 애플리케이션은 단일 작업(job)이거나 작업들의 DAG일 수 있어요.

  • ResourceManager(RM): 시스템 안의 모든 애플리케이션 사이에서 자원을 중재하는 최고 권위자예요. ResourceManager와 NodeManager가 함께 데이터 계산 프레임워크를 이뤄요.
  • NodeManager(NM): 머신마다 하나씩 있는 프레임워크 에이전트예요. 컨테이너를 담당하고, 컨테이너의 자원 사용량(CPU, 메모리, 디스크, 네트워크)을 모니터링해서 ResourceManager/스케줄러에 보고해요.
  • ApplicationMaster(AM): 사실상 프레임워크별 라이브러리예요. ResourceManager로부터 자원을 협상하고, NodeManager들과 협력해서 태스크를 실행·모니터링하는 책임을 져요.

ResourceManager는 다시 두 핵심 컴포넌트로 나뉘어요.

  • Scheduler: 실행 중인 여러 애플리케이션에 자원을 배분해요. 용량(capacity), 큐(queue) 같은 익숙한 제약을 따르고, 애플리케이션의 상태를 추적하거나 모니터링하지 않는 순수 스케줄러예요. 자원은 메모리, CPU, 디스크, 네트워크 등을 담은 추상 개념인 컨테이너(Container) 단위로 할당돼요. 스케줄러는 플러그 가능한 정책을 갖고 있고, 대표적인 구현으로 CapacitySchedulerFairScheduler가 있어요.
  • ApplicationsManager: 작업 제출을 받고, 애플리케이션별 ApplicationMaster를 실행할 첫 컨테이너를 협상하며, ApplicationMaster 컨테이너가 실패했을 때 재시작하는 서비스를 제공해요.

컨테이너와 실행 흐름

애플리케이션별 ApplicationMaster는 스케줄러로부터 적절한 자원 컨테이너를 협상하고, 컨테이너의 상태를 추적하며 진행 상황을 모니터링해요. 이렇게 하면 애플리케이션마다 "자신의 일"을 챙기는 마스터가 따로 있어서, 클러스터 전체 자원은 ResourceManager가, 개별 실행은 ApplicationMaster가 관리하는 구조가 되는 거예요.

hadoop-2.x 이후의 MapReduce는 이전 안정 릴리스(hadoop-1.x)와 API 호환성을 유지하고 있어요. 즉 기존 MapReduce 작업을 재컴파일만 하면 YARN 위에서 그대로 돌린다는 뜻이에요.

자원 예약(Resource Reservation)

YARN은 ReservationSystem 을 통해 자원 예약을 지원해요. 사용자가 시간에 따른 자원 프로파일과 시간 제약(예: 데드라인)을 지정해서 중요한 작업의 예측 가능한 실행을 보장받을 수 있게 해주는 컴포넌트예요. ReservationSystem은 시간 경과에 따른 자원을 추적하고, 예약에 대한 허용 제어(admission control)를 수행하며, 내부 스케줄러에 예약이 이행되도록 지시해요.

페더레이션(Federation)

YARN은 수천 개 노드 너머로 확장하기 위해 Federation 기능을 지원해요. 여러 YARN (하위) 클러스터를 투명하게 묶어서 마치 하나의 거대한 클러스터처럼 보이게 만드는 기능이에요.

더 알아보기