Hadoop v1 아키텍쳐
Hadoop v1과 v2의 가장 큰 차이점은 YARN의 존재이다. Hadoop v1의 아키텍쳐에는 YARN(Yet Another Resource Negotiator)이란 자원관리매니져가 없다.
MapResude 작업을 실행하기 위해 작업과 자원을 할당받기 위해 Master node의 역할을 하는 Job Tracker, Worker node의 역할을 하는 Task Tracker가 사용되었다.
사용자는 Map Task과 Reduce Task로 이루어진 작업을 client에 제출한다. client는 작업을 attempt의 단위로 분할하여 Job Tracker에 보낸다. Job Tracker는 자원과 작업 단위를 각 worker node의 Task Tracker에 분배하여 작업을 실행시킨다. Task Tracker는 Job Tracker에게 작업의 진행상황을 전송하며 작업을 수행한다.
이러한 프로세스는 Job Tracker에게 과도한 작업을 요구했다. 작업에 필요한 자원을 관리하는 리소스 매니징, 작업 스케쥴링, 작업 모니터링 등의 과도한 작업으로 인해 클러스터 확장에 있어 많은 한계가 존재하였다.
Hadoop v1의 Mapreduce가 가지는 문제점은 다음과 같았다.
•
확장성 병목 - 클러스터의 노드가 약 4천개를 넘을 때 작업의 병목 현상이 나타난다.
•
신뢰성과 가용성 문제(SPOF) - Job Tracker에 문제가 발생하면 작업의 정상동작이 어렵다.
•
MapReduce 프로그래밍 모델만 지원 -
•
클러스터 이용률 문제 - Multi-Tenancy의 요구
Hadoop v2 YARN
YARN은 이러한 점들을 개선하기 위해 등장하였다. YARN의 특징은 다음과 같다.
•
Job Tracker의 책임 분리
◦
Resource Manager - 기존의 MapReduce는 Map slot, Reduce slot의 개념으로 작업을 관리하였지만, Resource Manager는 Resource Container란 단위로 추상화하여 자원을 배분한다.
◦
Application Master
•
확장성 개선
•
다양한 워크로드 지원
•
클러스터 이용률 개선
•
기존 맵리듀스 호환성 지원
YARN의 아키텍쳐
Container(Resource Container)는 작업에 사용 가능 한 자원 단위를 뜻한다. 이는 RAM, CPU, 디스크 등 물리적 자원의 모음이다. Container는 환경 변수, 보안 토큰 등과 같은 정보를 포함하는 컨텍스트인 CLC(Container Launch Context)에 의해 호출된다.
Resource Manager는 클러스터 내 모든 자원을 관리하며, Master node 내 단 하나만 존재한다. Scheduler와 Applications Manager의 두가지 주요 구성 요소를 가진다.
•
Applications Manager: 클라이언트가 제출 한 작업을 관리하며, 승인 된 작업을 Scheduler에게 전달한다.
•
Scheduler: 할당된 작업과 사용 가능 자원을 기반으로 스케줄링을 담당한다. plug-in이 가능하기 때문에 다양한 알고리즘의 Scheduler를 적용 가능하다. 기본적으로 FIFO, Capacity, Fair Scheduler가 존재한다.
Node Manager는 노드의 상태를 Resource Manager에게 공유하고, 작업의 life-cycle을 감독한다. Resource Manager로부터 할당받은 자원으로 작업을 수행하기 위해 Application Master를 실행시킨다.
Application Mater는 할당받은 자원 외 추가 자원이 필요한 경우 Resource Manager와 협상하고, 실행하는 작업을 모니터링한다. Resource Manager에게 Heart beat를 전송한다.
YARN의 동작 흐름
1.
클라이언트가 YARN에 작업을 제출한다. 제출된 작업은 MapReduce 작업 또는 기타 애플리케이션/프로세스일 수 있다.
2.
Resource Manager가 검토 할 작업/애플리케이션을 선택한다.
3.
제출된 작업/애플리케이션이 여러 개 있을 수 있으므로, Resource Manager는 Scheduler를 통해 클러스터 내 사용 가능한 용량을 확인한다.
4.
Resource Manager가 새로 제출된 작업/애플리케이션을 시작할 수 있음을 확인하면 Applications Manager가 Container를 할당한다. Container는 작업/응용 프로그램을 시작하는 데 필요한 자원(CPU, 메모리 등)의 집합이다. 만약 Container 설정에 실패하면 자체적으로 해당 작업/애플리케이션을 담당하는 Application Master를 실행해주기도 한다.
5.
작업 요청을 처리할 수 있는 노드를 확인하고, 노드를 찾으면 동일한 Node Manager에게 연락합니다.
6.
해당 Node Manager는 작업/애플리케이션을 수행하는 데 필요한 리소스를 실제로 할당하여 Container 내에서 Application Master 프로세스를 시작한다. Application Master 프로세스는 작업/애플리케이션 실행을 위한 주요 프로세스이며, 프레임워크 구현체이다. Map Reduce Framework는 Application Master를 자체적으로 구현한다.
7.
Application Master는 작업/애플리케이션을 실행하는 데 추가 자원 또는 Container가 필요한지 확인한다. 예로 MapReduce 작업에 있어 여러 Mapper와 Reducer가 필요한 경우가 있다.
8.
추가 자원이 필요한 경우, Application Master는 Resource Manager와 협상하여 자원/Container를 할당받는다. *Application Master가 Resource Manager에게 자원을 요청하는 것을 Resource Request라고 한다. 네트워크 대역폭을 절약하기 위해 가능한 한 데이터에 근접하게 작업을 실행해야 하므로, 요청에는 위치 제약 조건 및 개별 작업을 실행하는 데 필요한 리소스가 포함된다. 요청에 대한 응답으로 Resource Manager가 선택한 노드에 Node Manager를 생성하면 Node Manager가 Container에 대한 자원을 할당하여 해당 Container 내에서 작업을 실행한다. 이 작업을 App Process라고 한다.
9.
Application Master는 이후 작업/애플리케이션에 대한 개별 작업을 실행하고 모니터링한다. 작업/애플리케이션 실행 상태를 나타내기 위해 Resource Manager에게 Heart beat 신호를 보낸다.
10.
작업/애플리케이션의 실행이 완료되면 해당 Application Master가 등록 취소된다.