YARN 리소스 스케줄러 심층 분석: 아키텍처 설계와 실전 구현

대규모 데이터 처리를 위한 YARN의 핵심 역할

YARN(또는 Yet Another Resource Negotiator)은 Hadoop 2.0 버전부터 도입된 핵심 자원 관리 컴포넌트로, 클러스터 내에서 다수의 컴퓨팅 프레임워크가 효율적으로 자원을 공유할 수 있도록 설계되었습니다. 이 시스템은 MapReduce, Spark, Flink 등 다양한 워크로드를 동일한 인프라 위에서 실행 가능하게 하며, 자원 활용률을 극대화하고 운영 복잡성을 줄이는 데 기여합니다.

예를 들어, 로그 분석, 실시간 스트리밍, 머신러닝 모델 훈련 같은 서로 다른 작업들이 동시에 수행되는 환경에서 각각 독립된 클러스터를 운영한다면 하드웨어 비용과 유지보수 부담이 급격히 증가합니다. YARN은 이러한 문제를 해결하기 위해 중앙 집중식 자원 스케줄링을 제공하며, 다양한 애플리케이션이 동적으로 자원을 요청하고 해제할 수 있는 유연한 구조를 제공합니다.

주요 구성 요소와 상호작용 메커니즘

YARN은 주로 세 가지 핵심 컴포넌트로 구성됩니다:

  • ResourceManager(RM): 전역 자원 관리 및 스케줄링 결정을 담당
  • NodeManager(NM): 각 노드에서 자원 사용 현황을 보고하고 컨테이너를 실행
  • ApplicationMaster(AM): 개별 애플리케이션의 실행 흐름을 제어하며 RM에게 자원 할당을 요청
ResourceManager ApplicationMaster NodeManager 1 NodeManager 2

상기 다이어그램에서 확인할 수 있듯이, AM은 RM에 자원을 요청하고, RM은 NM을 통해 실제 컨테이너를 할당합니다. 이 과정은 "pull 모델" 기반으로 이루어지며, AM이 필요 시점에 자원을 요청함으로써 중심 서버의 부하를 완화하는 효과를 얻습니다.

ResourceManager: 중앙 스케줄링 엔진

RM은 클러스터 전체의 자원 상태를 파악하고, 여러 애플리케이션 간의 자원 경쟁을 조율하는 역할을 수행합니다. 내부적으로는 두 가지 주요 서브시스템으로 나뉩니다:

  • Scheduler: 현재 자원 상태와 정책에 따라 자원 할당 결정을 내림 (HA에서는 상태 없음)
  • ApplicationsManager: 애플리케이션 등록, AM 시작, 장애 조치 등을 관리 (HA 복구 지원)

또한 RM은 지속성 저장소(RMStateStore)를 통해 애플리케이션 상태를 HDFS 또는 ZooKeeper에 저장하여, 장애 발생 시에도 상태를 복구할 수 있습니다.

<property>
  <name>yarn.resourcemanager.recovery.enabled</name>
  <value>true</value>
</property>
<property>
  <name>yarn.resourcemanager.store.class</name>
  <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
</property>

자원 스케줄링 전략 비교

스케줄러 종류 다중 큐 지원 자원 격리 주요 사용 사례
FIFO Scheduler 단일 사용자 테스트 환경
Capacity Scheduler 기업 내 다중 팀 공유 클러스터
Fair Scheduler 동등한 자원 배분이 필요한 연구 환경

특히 Capacity Scheduler는 조직 내 특정 부서에 최소 보장 용량을 할당하면서도 여유 자원이 있을 경우 초과 사용을 허용하는 형태로, 안정성과 유연성을 모두 확보할 수 있습니다. 다음은 큐 계층 구조 예시입니다:

root
├── marketing [30%]
├── analytics [50%]
│   ├── high-priority [70% of parent]
│   └── batch [30% of parent]
└── dev [20%]

NodeManager: 노드 수준 자원 실행 엔진

NM은 각 워커 노드에서 실행되며, 주기적으로 RM에 하트비트를 전송하여 현재 자원 상태(사용 가능한 메모리, vCore 수)와 실행 중인 컨테이너 정보를 보고합니다. 기본 주기는 1초이며, 네트워크 장애 시 재등록 메커니즘을 통해 안정성을 보장합니다.

컨테이너 실행 시에는 LinuxContainerExecutor를 통해 cgroups를 활용한 자원 격리를 수행합니다. 이를 통해 CPU 및 메모리 사용량을 강제 제한할 수 있습니다.

# 메모리 제한 설정 예시
echo 8589934592 > /sys/fs/cgroup/memory/hadoop-yarn/container_001/memory.limit_in_bytes

# CPU 코어 4개 할당
echo 400000 > /sys/fs/cgroup/cpu/hadoop-yarn/container_001/cpu.cfs_quota_us

이러한 메커니즘은 한 애플리케이션이 전체 노드 자원을 고갈시키는 것을 방지하며, 다중 테넌트 환경에서 필수적인 보안 장치입니다.

ApplicationMaster: 애플리케이션 특화 스케줄러

AM은 각 애플리케이션 인스턴스마다 생성되며, 해당 애플리케이션의 실행 전략을 결정합니다. 예를 들어, Spark 애플리케이션의 AM은 드라이버 프로세스를 시작하고, 필요한 만큼의 Executor 컨테이너를 점진적으로 요청합니다.

AM은 실패 시 자동 재시작이 가능하며, 최대 시도 횟수는 아래 설정으로 제어됩니다:

<property>
  <name>yarn.resourcemanager.am.max-attempts</name>
  <value>2</value>
</property>

재시작 시 원래의 실행 컨텍스트를 복원할 수 있도록 체크포인팅 기능과 연동하면, 장애 후에도 작업을 이어서 수행할 수 있습니다.

실습: 로컬 환경에 YARN 설정하기

다음 단계를 통해 단일 머신에 YARN을 설치하고 테스트할 수 있습니다.

  1. HDFS 초기화
    bin/hdfs namenode -format
    sbin/start-dfs.sh
  2. yarn-site.xml 설정
    <configuration>
      <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>localhost</value>
      </property>
      <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
      </property>
    </configuration>
  3. 서비스 시작
    sbin/start-yarn.sh
  4. 웹 UI 확인: http://localhost:8088
  5. 샘플 작업 제출
    bin/yarn jar share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar pi 4 1000

성공적으로 실행되면, 웹 인터페이스에서 애플리케이션 상태와 자원 사용량을 확인할 수 있습니다.

보안 및 다중 테넌트 지원

공유 클러스터에서는 보안 정책이 특히 중요합니다. YARN은 다음과 같은 수단을 통해 접근 제어를 제공합니다:

  • Kerberos 기반 인증
  • 큐별 ACL 설정 (제출 및 관리 권한)
  • 허용된 Docker 이미지 목록 제한
  • 최소 사용자 ID 제한 (system 계정 사용 방지)
<property>
  <name>yarn.queue.default.acl-submit-applications</name>
  <value>analyst-group</value>
</property>

결론: YARN이 여전히 중요한 이유

YARN은 단순한 자원 매니저를 넘어서, 다양한 컴퓨팅 패러다임을 통합할 수 있는 플랫폼 아키텍처를 제공합니다. 그 핵심 철학은 "자원 관리"와 "애플리케이션 로직"의 철저한 분리에 있으며, 이를 통해 새로운 프레임워크가 비교적 쉽게 통합될 수 있는 생태계를 조성합니다.

오늘날 클라우드 기반의 쿠버네티스와 같은 오케스트레이션 시스템이 부상하고 있지만, YARN은 기존 Hadoop 생태계와의 호환성, 성숙한 보안 모델, 그리고 대규모 배치 처리에 특화된 최적화 덕분에 여전히 많은 기업의 핵심 인프라로 자리 잡고 있습니다.

태그: yarn hadoop ResourceManager NodeManager ApplicationMaster

7월 6일 20:23에 게시됨