Hadoop eco

[Hadoop] 03. YARN(Yet Another Resource Negotiator)

root_bridger 2022. 12. 18. 23:33

이번에는 빅데이터 기술을 공부하다 보면 보게 되는 자원 관리 매니저 Yarn에 대해 다뤄보고자 한다.

항상 보고 쓰지만 그 형태가 눈으로 확인 되지 않다 보니, 나 역시도 개념만 익히고 사용하고 있었다. 하지만, 자원 할당을 고려하며 설계를 해본 뒤로 Yarn에 대해 궁금증이 생겼고 이번 기회에 다뤄보려고 한다.

 

YARN


YARN은 Yet Another Resource Negotiator이라는 뜻으로, 또다른 자원 협상가라는 뜻이다. 이름에서 유추할 수 있듯, YARN은 Client가 요청한 job에 대해 할당할 자원을 교섭하는 역할을 한다. YARN은 기존 Hadoop 1.0 버전 Job tracker에서 수행하는 역할 중 job scheduling, monitoring, resource management 등을 daemon으로 실행되며 처리한다. 이로 인해 기존 Mapreduce에서 처리하던 Resource manager 역할을 YARN이 대신 처리하게 되면서 Mapreduce는 훨씬 경량화 된 데이터 프로세싱이 가능해졌다. 이는 앞으로 발전하게 될 Spark와 같은 컴퓨팅 엔진이 발전을 할 수 있는 계기 중 하나가 되었다.

 

위의 그림은 YARN을 설명할 때 너무나도 널리 쓰이는 그림이다. 해당 구성요소들을 하나 하나 보면서 설명하자면,

Resouce manager

  • 가장 핵심적인 역할, 클러스터의 모든 application에 대한 자원을 관리함, 두가지 메인 컴포넌트로 구분 가능
    1. Scheduler : Application의 필요한 자원에 대한 스케줄링 진행, 자원 할당 이후엔 간섭 하지 않음
    2. Application Manager : Datanode에서 Application master 실행에 대한 검토 후 실행

Node manger

  • Datanode에 위치하며, Container 생성 및 실행을 담당, 이후 해당 노드를 모니터링 후 Resource manager에게 보고

Application master

  • 1개의 Application 마다 Resource manager로 부터 생성됨, 이후 해당 Application 관리 및 자원 요청 담당
  • 이후 자원을 할당 받으면 Node manager들에게 task 생성과 수행을 요청, Application 상태를 Resource manager에게 보고

Container

  • 하나의 노드에 할당 받은 자원들

 

 

등장 배경


  기존 Hadoop 1.0에서는 Job tracker에게 많은 역할이 부여됐다. 그 당시엔 여러 서브 프로젝트 없이 HDFS, Mapreduce 컴포넌트만 있었고, 이러한 통제를 모두 Map reduce의 Job tracker에서 했다. Hadoop의 사용이 늘어나고 클러스터가 거대해지면서 하나의 노드에서 task 수행, scheduling, resource 관리, 작업 monitoring 등을 모두 실행하다보니, task의 크기가 커짐에 따라 job tracker의 부하는 점점 커져갔고 bottleneck 발생 및 컴퓨터 자원의 비효율적인 운영이 이어졌다.

  이러한 문제를 해결하기 위해 hadoop 2.0 버전 부터는 Yarn 이라는 resource manager를 도입했고, Yarn이 기존 job tracker에서 해오던 작업 중 자원 관리와, 스케줄링 작업을 인수 받으며 아래 그림과 같이 HDFS 바로 위에 위치하게 되었다. 이로서 Hadoop은 HDFS에 있는 파일들을 토대로 Mapreduce 뿐 아니라 다른 일들을 수행할 수 있도록 변화됐다. 또한 Yarn을 바탕으로 다른 컴퓨팅엔진(Spark, Storm...) 혹은 NoSQL(Hbase...)등을 사용 가능케 했다.

 

 

동작 원리


Yarn의 동작과정 / 출처 : https://taaewoo.tistory.com/21#YARN%EC%-D%--%--%EC%-C%--%EC%B-%--

1. Client는 Resource manager(이하 RM)에게 실행할 Application을 제출한다.

2. RM은 특정 노드에 Application Master(이하 AM)을 실행한다. 이후 Application ID를 생성한다.

3. AM은 필요한 자원을 RM에 요청 후 할당을 받음

4. AM은 해당 Application용 Container를 생성해달라고 각 노드의 Node manager(이하 NM)에 요청한다.

5. 이후 해당 Container에서 Application code가 실행된다. 작업이 끝나면 모든 자원은 다시 RM에게 반납된다.

 

끝으로


Yarn 하나만 보더라도 정말 많은 내용이 있다 이 포스팅은 정말 간략한 소개 정도로 이해하면 좋을 듯하다.

심화된 내용을 더 작성해보고자 했으나, 아직 나조차도 이해하지 못하고 있다. 더 공부해서 다음엔 Yarn의 심화된 내용을 작성해보고자 한다. 최초의 요구사항 중엔 어떤 것들이 있었는지, 해당 시스템이 구체적으로 어떤 구성이 있는지 등 말이다. 조잡한 글 읽어 주신 분들께 감사하다. 마지막으로 밑에는 정말 정리가 잘된 블로그들이다. 이런 양질의 글을 작성해주시는 분들께 늘 감사하다는 말로 이 글을 마친다.

 

참고 자료


https://magpienote.tistory.com/224

https://c774c6a9d658.gitbooks.io/hadoop_study/content/yarnc758_c774_d574.html

https://12bme.tistory.com/435

https://it-sunny-333.tistory.com/51

https://www.popit.kr/what-is-hadoop-yarn/

https://ko.myservername.com/apache-hadoop-yarn-tutorial

https://taaewoo.tistory.com/21#YARN%EC%-D%--%--%EC%-C%--%EC%B-%--

https://kadensungbincho.tistory.com/32

https://mangkyu.tistory.com/127