[Hadoop] YARN - 리소스 관리자와 스케줄러
저번에는 하둡이 무엇인지, 그리고 하둡의 기본 파일 시스템인 분산 파일 시스템에 대해 공부했다.
이번에는 이어서 하둡의 리소스 관리자와 스케줄러에 대해 공부해보려고 한다.
분산 시스템에서는 스케줄링과 리소스 관리 기능을 핵심 요소로 가지고 있는데, 하둡에서는 계산 리소스를 할당하고 사용자 애플리케이션을 스케줄링하는 시스템으로 YARN 을 사용한다.
YARN (Yet Another Resource Negotiator) 은 스케줄링과 리소스 관리를 담당하여 데이터의 지역성을 극대화하고 계산량이 많은 애플리케이션이 자원을 독점하지 않도록 제어한다.
또한 교체가 가능한 스케줄링 시스템을 지원하고 사용자당 리소스 제한, 작업 대기열당 리소스 할당량 등의 공용 리소스 시스템 스케줄링에 필요한 환경 설정을 스케줄러에 입력할 수 있다.
YARN은 클러스터의 리소스를 컨테이너로 분할하고, 컨테이너는 기본적으로 할당되는 CPU의 코어 수와 메모리 용량으로 정의되며 추가적인 리소스(CPU 코어, 메모리, GPU, 스토리지) 등을 포함하기도 한다.
YARN은 실행 중인 컨테이너들을 모니터링하며 컨테이너가 리소스(CPU, 메모리, 디스크, 네트워크 등)의 최대 할당량을 초과하지 않도록 제어한다.
다른 워크플로우 스케줄러들과 달리 데이터 지역성도 리소스로 제공하는데, 맵리듀스 같은 YARN 애플리케이션에서는 특정한 컨테이너가 특정 데이터를 저장하고 있거나 최대한 가깝게 연결된 서버에서 실행되도록 요청할 수 있다.
YARN은 클러스터의 리소스를 컨테이너로 관리하며 분산 시스템을 원활하게 운영하고 클러스터의 리소스를 여러 애플리케이션에 공평한 방식으로 공유한다. 컨테이너를 비공개로 설정하여 사용자별로 분리할 수도 있고, 사용자가 요청한 작업을 적당한 시점에 시작할 수도 있다.
위에 살펴본 내용을 토대로 하둡의 전체적인 구조를 보면 다음과 같다.
맵리듀스, 테즈, 스파크, SAS 등의 처리 엔진 |
YARN I 스케줄러 제공, 컨테이너 관리와 분리(리소스 관리), 데이터 지역성을 리소스로 사용 |
HDFS (하둡 분산 파일 시스템) |
참고 : 「하둡과 스파크를 활용한 실용 데이터 과학」, 오퍼 멘델리비치 외 2명