하둡의 코어 서비스 중 하나인 YARN의 아키텍처에 대해서 공부한 내용을 정리합니다.
Core Hadoop
이전 글에서 살펴봤듯이 YARN은 하둡의 두 기둥 중 하나이다.
이번 글에서는 클러스터의 리소스를 관리 및 할당하는 YARN에 대해서 자세히 살펴볼 것이다.
YARN
YARN은 Yet Another Resource Negotiator의 줄임말로, 클러스터 내 서버들의 CPU와 메모리, 네트워크 등 시스템 리소스를 하나로 묶어 관리한다. YARN에서 자원을 할당하는 단위를 컨테이너
라고 하며, YARN은 자원 할당 요청이 들어오면 자원을 제공하고 사용이 끝나면 회수한다.
그렇다면 컨테이너에서는 어떤 일이 진행될까? 아래의 사진을 살펴보자.
위 사진은 Hadoop에서 기본적으로 사용하는 MapReduce 이며, YARN 컨테이너에서 작동할 수 있는 엔진 중 하나이다. 여기서 말하는 엔진이란 HDFS에 저장되어 있는 데이터들을 분산 컴퓨팅하여 결과를 도출하는 방법론이며, 결국 엔진 또한 하나의 실행 프로그램이다. 즉, YARN에서 프로그램을 돌릴 수 있는 환경을 제공받고 그 환경 내에서 MapReduce라는 프로그램을 작동하는 것이다. 현재는 MapReduce 엔진 외에도 Tez, Spark 도 사용되고 있다. 엔진에 대해서는 차후 다른 글에서 자세히 설명하고자 한다.
YARN Roles
YARN은 크게 마스터-워커 구조로 이루어져 있다. 바로 Resource Manager와 Node Manager이다. 이름에서 유추할 수 있듯이 Resource Manager(RM)는 클러스터의 모든 리소스들을 관리하며, Node Manager(NM)는 각 노드에서 RM에게 지속적으로 노드 자원의 상태를 전달하고 실제 리소스들을 사용하여 컨테이너를 제공한다.
위 사진에는 각 역할의 컴포넌트 설명이 자세하지는 않아서 덧붙여 이야기하고자 한다. 먼저 Resource Manager의 컴포넌트는 크게 Scheduler와 Application(App) Manager로 구성되어 있으며, 각각의 역할은 아래와 같다.
- Scheduler: Node Manager로부터 현재 리소스 사용률 등을 파악하여 자원 할당 요청이 들어오면 가능한 자원들의 리스트를 제공한다.
- App Manager: 클라이언트로부터 작업 요청을 받아 Node Manager에 App master를 실행시키고 모든 App master의 상태를 관리한다.
다음으로는 Node Manager의 컴포넌트에 대한 설명이다.
- App master: 특정 작업(Job)을 진행하는 관리자. 작업을 위한 Task들을 NM에 요청하여 실행 및 관리한다.
- Task: 실제 작업이 진행되는 컨테이너. NM에 의해 생성되며 App master를 통해 관리된다.
YARN Process
이제 YARN에서 작업(Job)을 수행할 때 어떤 프로세스로 작동되는지 자세히 살펴보자. 아래의 그림에는 어떤 클라이언트가 작업을 요청했을 시에 진행되는 과정들을 도식화 되어 있다.
위 도식을 더 자세히 설명하면, App Manager는 NM에 App master 생성을 요청하는 것이고, App master를 직접 생성하는 건 NM이다. 또한 Scheduler는 App master의 요청에 따라 현재 사용가능한 NM 컨테이너들의 리스트를 제공하며, App master는 해당 리스트에 속한 NM에게 Task 컨테이너 생성을 요청한다.
Fault tolerance
YARN은 비교적 내결함성이 잘 보장되어 있다. 아래 그림의 Case들을 살펴보자.
Case 1,2,3처럼 NM이 죽은 경우에는 대부분 운영 상에 문제가 발생하지는 않는다. 물론 NM이 다 죽는 최악의 경우에는 작업할 컨테이너 생성 자체가 안되기에 문제가 발생하지만 그런 경우는 거의 없다. 하지만 기본적인 YARN 구조에서 RM은 독단적으로 존재하며 작업 운영 상의 중요한 역할들을 맡고 있어서 RM 노드가 죽을 시 바로 내결함성은 보장되지 않는다.
YARN HA Process
결국 마스터-워커 구조인 YARN 또한 HDFS처럼 마스터가 죽으면 바로 운영이 중단된다. 따라서 고가용성 보장을 위하여 RM을 Active-StandBy 구조로 이중화하여 액티브 RM에 문제가 있을 시 바로 스탠바이 RM이 작동할 수 있도록 한다. HA 구조로 설정한 YARN의 프로세스는 아래의 그림과 같다.
HDFS와 동일한 구조이기에 보통 네임노드와 같은 서버에 셋팅하는 경우가 많으며, 효율적인 리소스 사용을 위해 위 그림과 달리 한 서버에 액티브 네임노드와 스탠바이 RM을 두는 크로스 셋팅을 하기도 한다. 또한 Active-StandBy구조의 경우 필수적으로 Jookeeper의 failover Controller가 셋팅되어 각각의 생존여부를 Jookeeper가 관리하도록 한다.