공부한 내용을 적은 거라 틀린 부분이 있을 수 있습니다.
아래 그림을 전제로 하여 설명해본다.
이해를 돕기 위해 하나의 상황을 가정해보자.
나는 총 세 대의 서버를 갖고 있고, 이 서버 위에 클러스터를 구축하여 빅데이터를 처리하는 application 을 실행한다고 해보자.
세 대의 서버 위에 구축된 클러스터에 Hadoop YARN 이 올라간다.
YARN 은 Resource Manager(이하 RM) 를 실행시킨다.
RM 은 클러스터 당 하나만 있다.
또한 YARN 은 클러스터를 구성하고 있는 각 노드에서 Node Manager 를 실행시킨다.
Node Manager(이하 NM)는 해당 노드의 Resource 를 관리하고 있다.
만약 RM 이 "3번 노드의 Resource 는 얼마나 있지?" 라고 3번 노드에게 물으면,
3번 노드의 NM 이 "cpu 85% 놀고 있고 여유 memory 3g 있슴돠" 이렇게 대답 할 것이다.
따라서 RM 은 NM 을 통해 전체 클러스터의 Resource 를 알고 관리할 수 있다.
Client(이하 Cli) 인 우리는 RM 에게 "나 MapReduce 하나 돌리고 싶다." 라고 말한다.
(이 작업은 Cli가 RM에게 Container Launched Context 를 보냄으로써 이루어진다고 한다.)
RM 은 요청 받은 작업을 실행하기 위해, Message Interface 를 통해 Application Master(이하 AM) 를 실행시킨다.
구체적으로 어떻게 실행시키는지 보자.
클러스터를 구축하고 있는 세 개의 노드 중 하나에 AM 을 실행시킨다.
위의 그림에서 보면 2번 노드에 AM 이 MapReduce(MR) 을 실행시키기 위해 만들어졌다.
AM 은 Cli 가 요청한 작업을 전적으로 맡아 수행 할 것이다.
AM 은 Cli 가 요청한 작업이 얼마만큼의 Resource 를 필요로 하는지 파악 한 후에
AM 은 RM 에게 "이 만큼의 Resource 가 작업하는 데 들어가니 할당 좀 해주세요" 라고 말한다.
RM 은 AM 에게 "알았다 Container 3개 만큼 만들 수 있도록 해줄께" 라고 말한다.
AM 은 각 노드의 NM 에게 Container 를 만들라고 지시하고 NM은 Container 를 만든다(실질적으로 Container 를 만드는 건 NM)
(위의 그림에서 빨간색 Container 3 개가 1번 노드에 하나, 3번 노드에 2개 만들어진 것을 확인할 수 있다.)
여기서 말하는 Container 를 Resource 라고 봐도 무방하다.
task 가 실행되기 위한 공간이다.
많으면 많을수록 task 가 많이 실행 될 것이다.
할당된 Container 들은 이제 AM 이 관리한다.
AM 의 세상이다.
RM 은 AM 이 작업을 할 수 있도록 환경을 구성해주었고,
AM 이 이제 Cli 가 요청한 작업 수행을 직접 관리한다.
AM 은 위의 세 개의 Container 들을 사용하여 Job Tracker, Task Tracker 등을 만들고 Cli 가 요청한 작업을 수행한다.
AM 은 각 노드의 NM에게 "너는 이런 task 를 실행하고, 너는 저런 task 를 실행해라" 라고 명령하고,
NM 은 그 명령에 따라 task 를 실행시킨다.
작업이 완료되면 AM 은 결과를 Cli 에게 보낸다.
또한 AM 은 RM 에게 "일 다 끝났어요!" 라고 말 하고 자신을 정지한다.
RM 은 AM 에게 할당한 Resource 들(빨간 박스들)을 모두 수거해간다. Resource 낭비를 막고 다른 AM 에게 주어 재사용하기 위해.
위에선 Cli 가 요청한 작업으로 MapReduce 를 예로 들었지만, MapReduce 말고 다른 작업들,
이를 테면 Apache Spark, Hbase, Apache Storm 등이 대신 올 수 있다.
이때도 역시 RM 이 관여하여 Resource 를 할당해주고, 각 App 에 맞는 AM 이 구동된다.
(MapReduce 작업시에는 MapReduce AM 이 돌아가고, Spark 작업시에는 Spark AM 이 돌아간다)
아래와 같은 모양이 될 것이다.
결론적으로 YARN 은 Cluster 의 Resource 를 관리해주는 Cluster Resource Manager 가 된다.
이 위에 여러가지 형태의 작업들을 돌릴 수 있다.
YARN 의 목적은 이렇다.
서로 다른 서버 위에서 여러 작업들이 하나의 Resource Manager(YARN)에 의해 관리된다.
그렇게 함으로써 서버 Resource 낭비를 최소화할 수 있다.
간단한 기본 개념은 이렇고, 구체적으로 알아보기 위해선 구글링 하거나 아래 "참고" 문서들을 읽어보라!
참고
https://developer.ibm.com/tutorials/bd-yarn-intro/
https://olpaemi.blog.me/140206667534
https://www.popit.kr/what-is-hadoop-yarn/
https://eyeballs.tistory.com/82
'Hadoop' 카테고리의 다른 글
[HDFS] 관리 명령어 모음 링크 (0) | 2019.11.15 |
---|---|
[YARN] 로그 보는 방법 (0) | 2019.11.07 |
[Hadoop] safe mode off 하는 방법 (2) | 2019.09.05 |
[Hadoop] 하둡 관련 여러 정보 모아둔 블로그 링크 (0) | 2019.06.07 |
[Hadoop] namenode format 방법 (0) | 2019.05.16 |