Hadoop 2.2.0 MapReduce v2 – YARN (2)

By | Y2014Y2014-4M-D

* 본 포스팅은 아파치 재단의 Hadoop 공식 문서 중 stable 버전인 2.2.0(2014년 4월 19일 현재) 기준으로 작성하였습니다.

하둡의 버전 업에 관해 다음으로 알아 볼 것은 Apache Hadoop NextGen MapReduce (YARN) – 줄여서 MRv2 라고 한다고 소개하고 있다.

YARN을 알아보기 전에 먼저 맵리듀스 프레임워크를 간단히 알아보자.

아파치 문서의 소개에 따르면, Map Reduce 는 신뢰성 있고 결함에 강한 방법으로 일반적인 하드웨어를 (수천 노드의) 대규모 클러스터 상에서 (수 테라바이트의 데이터 집합으로 된) 거대 데이터를 처리할 수 있는 어플리케이션 제작을 위한  소프트웨어 프레임워크이다 – 라고 소개하고 있다. 말 그대로 완전 큰 데이터를 쪼개서 병렬처리할 수 있는 어플리케이션을 동작시키기 위한 프레임워크다.

맵리듀스는 위에서 말한 것처럼 큰 데이터의 집합을 쪼개 병행처리다고 했는데 그 방식을 알아보면, 이 맵리듀스 잡의 map task가  입력된 데이터 셋을 완전히 병렬처리하여 독립적인(즉, 각 데이터가 서로 의존성 없이 잘린다) 데이터의 덩어리(Chunk;청크)로 쪼갠다. 프레임워크는 이 출력 정크를 정렬하여 reduce task 에 입력하고, 이 입력/출력 데이터는 파일 시스템(당연히 HDFS..)에 저장된다.

프레임워크는 task 일정을 조정하고, 감시하며 실패한 task를 재실행 시킨다고 한다. 그 말은 곧 일반적으로 MapReduce 프레임워크와 HDFS 는 같은 노드에서 실행되며 이러한 구성은 프레임워크가 데이터가 존재하는 노드의 task 일정 조정을 효과적으로 실시하고, 전 클러스터에 걸쳐 매우 높은 총 대역폭을 이루어낸다.

비유를 들자면, 김밥 아줌마가 그냥 김밥, 참치 김밥, 김치 김밥..등 몇가지 종류의 김밥 열개를 주문받았을때 하나 만들고, 다음 만들고… 해서 열개 만드는 것보다는 김을 김밥도마에 열장 쫙~ 깔고 (Map Task) 김밥의 종류를 정한 다음(Sorting)에 기본 공통 재료를 각 김 위에  올리고 나머지 김밥 재료는 그 순서에 맞게 필요한 재료를 깔고 말면(Reduce) 총 시간이 훨~~~~~씬 줄어든다(?)라고 말할 수 있는 것이다.(비유가 그렇다는 거다.ㅡ,.ㅡ 어이 거기 아저씨 돌 들고 뭐하는 건가~? 후다닥 ==3;;;;)

맵 리듀스는 단일 마스터인 JobTracker 와 클러스터 노드마다 한개의 슬레이브인 TaskTracker 로 구성되는데 마스터는 각 슬레이브 내에서 맵 리듀스 잡의 구성 요소 Task 들의 일정을 조정하고 감시하며 실패한 task 를 다시 수행한다.

물론 마스터는 직접 슬레이브가 Task를 수행시킨다. 맵리듀스 어플리케이션(페이로드)을 실행시키려면 최소한 입출력 위치와 적당한 추상클래스나 인터페이스를  구현한 map and reduce 함수 그리고 job configuration을 구성하기 위한 기타 job parameter 들을 지정해야 한다.

하둡의 job client는 job을 접수하고 JobTracker 를 설정한다. 이 JobTracker는 소프트웨어와 설정을 슬레이브들에 배포, task 감시와 일정관리 및 job 클라이언트에 대한 상태와 진단을 제공한다. 매퍼(Mapper)는 입력된 키/값 쌍들을 중간 단계에서 처리가 가능한 키/값 쌍으로 변환하면 리듀스는 키를 공유하고 있는 이 매개 값들을 섞기(shuffle)/정렬(sort)/재정렬(secondary sort)/리듀스(reduce)작은 값들의 집합으로 바꿔 최종 결과를 출력한다. (좀 더 자세한 사항은 http://hadoop.apache.org/docs/r1.2.1/mapred_tutorial.html 에서 참고하기 바랍니다.)

하둡 2.x 버전에서는 자원 관리 영역을 하둡의 YARN 프레임워크로 분리하였다.

반면 맵리듀스는 분산 컴퓨팅 연산 프레임워크로 남겨두게 되었는데 이전 버전의 맵리듀스(MRv1)는 별다른 큰 변경 없이 쭉 재사용되어왔고, 덕분에 MRv2 에서는 MRv1용 어플리케이션에 대한 만족할만한 호환성을 보장한다.

하지만 기능 상의 향상과 코드 재사용성을 위해 몇몇 API 들이 하위호환성을 위해 재작성되었다고 공식문서에서 말하고 있다. (호환성에 대한 자세한 사항은 Apache Hadoop MapReduce – Migrating from Apache Hadoop 1.x to Apache Hadoop 2.x;http://hadoop.apache.org/docs/r2.2.0/hadoop-mapreduce-client/hadoop-mapreduce-client-core/MapReduce_Compatibility_Hadoop1_Hadoop2.html 를 참고)

지금까지 MapReduce 의 개념에 대해 알아보았다. 이제 YARN 을 알아보도록 하자.

YARN 프레임워크의 구조에 대해서는 다음과 같이 그림으로 잘 설명되어 있다.

MapReduce NextGen Architecture

The ResourceManager has two main components: Scheduler and ApplicationsManager

다시 아파치 공식 문서를 확인해보자.

하둡은 0.23 버전에서 오버홀(자동차의 오버홀- 그거 맞다. 차 분해해서 완전히 한번 정리하는거)을 거치면서 MapReduce 버전 2.0(MRv2)와 YARN 으로 분리되었다고 한다.

아까 위에서 밑줄 쫙~ 긋고 간 부분의 그 내용이다. 상단 그림을 보시면 Resource Manager가 자원 관리를 위해 완전히 분리되어 있는 구조로 되어있다.

이 개념은 JobTracker의 주요 기능인 자원관리(Resource Management)와  잡 스케줄링 및 모니터링을 별도의 데몬으로 분리하는 것이다. 즉 글로벌 자원관리자(RM) 과 어플리케이션당 어플리케이션 마스터(AM)를 두는 것이다. 한 어플리케이션은 DAG (Direct Acyclic Graph;http://wiki.egee-see.org/index.php/Description_of_DAG_jobs) 잡이나 맵리듀스 잡을 기존의 방식으로 수행되는 단일 잡이다.

자원 관리자는 위 그림에서 보듯, 데이터 계산을 위해  노드별로 NodeManager(NM)을 가지며, 시스템 내의 어플리케이션들 간의 자원 조정을 위한 최고 권한을 가지고 있다. 한편, 어플리케이션 별 ApplicationMaster 는 사실 프레임워크로부터 특정되는 라이브러리이며 자원관리자로부터 자원에 대한 협상을 맡으며 노드매니저와 함께 task 들을 감시하고 실행한다.

스케줄러는 큐나 용량 등의 유사 조건들에 대해 다양한 실행중인 어플리케이션들에 대한 자원을 배치하는 역할을 한다. 이 스케줄러는 실제로 순수한 스케줄러 역할을 하는 것이라 어플리케이션에 대한 모니터링이나 추적은 하지 않는다. 그래서 어플리케이션이나 하드웨어 장애에 대응하여 재시작을 한다던지 하는 부분에 대해서는 보장하지 못한다. 그래서 메모리나 CPU, 디스크, 망 등의 요소로 이루어진 자원 콘테이너(Container) 라는 추상적인 개념 위에서 동작한다.(초기 버전에는 메모리만 지원됐다네요~)

뺐다 꼈다(pluggable) 할수 있는 정책 플러그인 형태로 되어 있는 스케줄러는 또한 다양한 큐나 어플리케이션 사이에서  클러스터의 자원에 대한 파티셔닝을 책임진다. 용량 스케줄러(Capacity Scheduler)나 페어 스케줄러(Fair Scheduler) 등은 현재의 맵리듀스  플러그 인의 예가 될 수 있다. 이 중, 용량 스케줄러는 좀 더 예측 가능한 클러스터 자원의 공유를 위한 계층 큐 방식을 지원한다.

어플리케이션 매니저는 잡의 제출(job-submissions)에 대한 책임을 지는데, 특정 어플리케이션 마스터의 어플리케이션 실행을 위한 첫 컨테이너를 협상한다. 그러고 실패시 어플리케이션 마스터를 재시작하는 서비스를 제공한다.

머신당 있는 프레임워크 에이전트인 노드 매니저는 콘테이너와 그 콘테이너의 리소스 사용률이나 모니터링을 담당하며, 리소스 매니저/스케줄러에 대해서도 똑같이 보고한다.

어플리케이션 당 어플리케이션 매니저는 스케줄러로부터 적절한 자원콘테이너 협상과 진행 상황에 대한 모니터링과 상태를 추적을 맡는다.

3,447 total views, 2 views today

댓글 남기기