YARN 톺아보기
Hadoop EcoSystem을 배울 때 가장 먼저 등장하는게 바로 YARN이다. Apache Hadoop은 HDFS와 MapReduce 그리고 YARN으로 구성되어 있다고 배우기 때문이다. 하지만 YARN이 리소스 관리를 한다는 사실만 알지 정확히 어떤 부분에 관여하는지, 어떤 시스템이 YARN을 사용하는지 명확한 정리를 해본 적이 없어 이 글을 작성하게 되었다.
YARN이란?
하는 일은 운영 체제(OS)라고 생각하면 이해가 쉽다.
Hadoop의 클러스터 리소스 관리 및 작업 스케줄링 시스템으로 요약할 수 있으며 구체적인 잡을 요약하자면 Queue 형태로 Jar 파일들을 관리해준다.
서버 구성은 다음과 같다.
- Resource Manager, Node Manager로 이루어져 있다.
각각은 Name/Data, Master/Worker 의 관계와 비슷하다고 생각하면 된다.
- 여기서 Node Manager는 실제 Data node 개수 만큼 서버를 구성하는 것이 일반적이다. HDFS의 Worker node를 3개로 지정했다면 YARN의 Node Manager 서버도 해당 서버 3개를 사용한다.
Job이 수행되면
1. Resoure Manager가 Job을 접수한다.
2. NM 중 하나에 Application Master 한개를 띄운다. 이제 이 AM이 해당 Job의 전반적인 모든 걸 관리한다. 해당Job이 끝나면 AM도 사라진다.
AM은 필요한 리소스((cpu, 메모리, 디스크)를 RM에게 요청한다.
RM은 NM에게 컨테이너 구성을 지시하고 NM은 컨테이너를 실행하고 관리한다.
3. 할당된 리소스로 컨테이너를 구성해서 요청된 작업을 순차적으로 마무리 한다.
AM은 작업 조정 및 상태 추적 등의 작업을 지속한다.
역할 요약
- 위의 흐름으로 YARN은 클러스터 리소스를 관리하고 요청된 작업에 적절한 리소스를 할당한다.
- 분산 처리 작업을 우선순위, 리소스 요청, 사용 가능한 리소스를 고려하여 스케줄링 한다.
- 마지막으로 노드의 상태를 모니터링하고 장애가 있을 경우 재시작하는 기능을 제공한다.
추가로
위에서 Data Node 와 Node Manager가 같은 서버를 쓴다고 했는데, 이렇게 할 경우 Data 의 Network I/O를 줄일 수 있기 때문에 유리하다. Data가 있는 곳에서 직접 Job을 관리하고 있으니 거기서 명령을 실행시키면 되니까.
이와 같이 Yarn이 하는 일은 사실상 간단하다.
Applicastion Master라는 개념이 들어오면서 헷갈리시 시작하는데, Application을 하나의 request라고 생각하면 이해하기 쉽다.
YARN과 상호작용 하는 Component
Hadoop Ecosystem의 모든 컴포넌트의 리소스를 YARN이 관리하는건 아니다. 어떤 컴포넌트를 사용할 때 YARN이 관여하는지 리스트업 해보았다.
YARN을 사용하는 Hadoop Ecosystem Component
1. Map Reduce
YARN은 2.X 버전에서 MapReduce와 함께 도입되었으며, 이전에는 MapReduce가 혼자 일을 처리하였다.
2. Tez
다음 글 주제일 예정
3. Spark, Flink
클러스터 매니저 옵션으로 YARN을 선택할 수 있다.
4. Oozie
하둡의 여러 컴포넌트와 통합되어 작동하는 스케쥴러이다.
YARN을 간접적으로 사용하는 Hadoop Ecosystem Componenet
1. Hive
Map Reduce / Tez 엔진을 선택한 HiveQL은 YARN을 사용한다.
2. Sqoop
데이터 이관 툴로 내부적으로 데이터를 가져올 때 분산 처리를 위해 Map Reduce 프레임워크를 사용할 수 있다.
YARN을 사용하지 않는 Hadoop Ecosystem Component
1. Impala
자체 분산 엔진 사용한다.
2. Zookeeper
분산 애플리케이션의 일관성과 동기화를 처리함, YARN과 목적이 다르다.
YARN의 개념부터 사용까지 알아보았다. 이젠 AM을 보며 두려움에 떨지 않을 수 있겠다. 기회가 닿으면 모니터링에 관한 글도 써보려고 한다.
예를 들어 impala는 YARN을 사용하지 않으니 YARN Queue Manager를 통해 모니터링 할 수 없을 것이다. 어떤 Job들을 실행할 때에 Queue Manager UI를 활용할 수 있을 지 확인하고자 위에서 리스트업을 해본것이니, 다음 언젠가의 주제로 등장할 예정이다. 끗.