Hadoop.2 HDFS와 YARN

이 글에서는 HDFS와 YARN에 대해서 한발짝 더 들어가 보기로 한다.

HDFS는 Hadoop Distributed File System의 약자로 여러 서버에 걸쳐 분산된 형태로 파일을 저장하기 때문에 확장성이 있고 이동이 용이한 파일 시스템이다. 이는 Java로 개발되었으며 Hadoop 프레임워크의 가장 아랫단에서 인프라 역할을 한다.

파일시스템은 흔히 우리가 얘기하는 NTFS, EXT4, FAT 이런 것들을 연상하면 된다. 이들 기존의 파일시스템들은 한 서버 내의 물리적 디스크를 조직하는 것이었다면...

Hadoop은 여러 서버에 걸쳐 있는 분산된 저장 리소스들을 논리적으로 하나로 엮은 상위 레벨의 파일시스템이라 볼 수 있다. 물론 각 서버 내에서는 그 서버의 OS에서 사용하는 NTFS나 EXT4 같은 물리적 파일시스템을 활용한다.

HDFS

HDFS는 큰 데이터를 잘 저장하기 위해 만들어진 것이다. 여기서 크다고 하는 건 기가바이트 단위가 아니고 테라바이트(Tera) 혹은 페타바이트(Peta) 정도를 의미한다. 이렇게 큰 데이터를 하나의 시스템에서 관리한다는 것은 비용이 너무 많이 들고 가능하지도 않기 때문에, 자연스럽게 여러대의 서버에 나누어 저장하는 분산 기술이 핵심이다.

일반적으로 HDFS 클러스터는 하나의 네임노드(Name Node)와 여러개의 데이터노드(Data Node)로 구성된다. 네임노드는 이름과 위치 등의 메타데이터를 관리하는 녀석이고, 데이터노드는 실제 데이터의 저장을 담당하는 녀석이다.

By Apache Hadoop
HDFS는 네임노드의 복사본인 2차 네임노드(Secondary Name Node)를 생성하기 때문에, 중요한 메타정보를 안전하게 관리할 수 있다. 그런데 여기서 중요한 점! 사람들은 흔히 메인 네임노드가 다운되면 자동으로 알아서 2차 네임노드가 그 역할을 하지 않을까? 라는 기대를 한다. 그런데 아직 Hadoop은 이런 네임노드의 Fail Over를 지원하지 않는다. (어디선가 이 기능도 구현 중이라 들었다)

그럼 2차 네임노드의 역할을 무엇일까? Hadoop의 네임노드는 현재의 메타정보와 변경된 메타정보(edits.new라고 하는...)를 가지고 있다. 이것을 정기적으로 병합해 주어야 하는데, 이 작업을 2차 네임노드가 정기적으로 수행한다. 병합이 완료되면 edits.new는 비워지고, 변경된 최신 메타정보를 만들 수 있는데, 이를 메인 네임노드와 동기화하는 것이다.

By yoyoclouds
그리고 위 그림에서 볼 수 있듯이 동일한 색상의 데이터가 여러 서버에 중복 배치되어 있음을 볼 수 있다. 이런 구조 때문에 한 데이터노드에 문제가 생기더라도 다른 데이터노드에서 그 데이터를 가져올 수 있어 무장애 운영을 할 수 있다.

YARN

Hadoop이 버전1에서 버전2로 올라갔지만, 두 버전 모두 MapReduce 엔진을 주요 모듈로 가지고 있다. MapReduce도 HDFS와 비슷한 방식으로 Job을 제출하고, Job의 진행 상황을 추적하는 로직을 가지고 있다.

네임노드가 있는 서버에는 잡 트래커(Job Tracker)가 있고, 데이터노드가 있는 장비에는 타스크 트래커(Task Tracker)가 배치된다. 비슷하게 잡 트래커는 여러 타스크 트래커에 효율적으로 임무를 할당하고, 결과를 수신하여 병합하는 역할을 한다.

By Sachin Puttur
MapReduce 엔진은 Hadoop 0.23버전에서 대폭 변경이 된다. 그래서 MapReduce 2.0 혹은 MRV2라고 불렀었는데, 나중에 YARN(Yet Another Resource Negotiator)이라는 이름이 지어졌다.  (yarn은 '실'이라는 뜻이 있어서, YARN을 표현할 때 털실뭉치를 많이 사용한다)

YARN은 기존의 Job Tracker리소스 매니저(Resource Manager)와 어플리케이션 마스터(Application Master)로 분리하였다. 리소스 매니저들은 클러스터 내의 컴퓨팅 리소스들을 어플리케이션에 할당해 주는 역할을 하며, 어플리케이션 마스터는 컴퓨팅 리소스를 할당받아 어떤 어플리케이션을 실행하고, 라이프 사이클을 관리한다.  이 어플리케이션은 전통적인 MapReduce 뿐 아니라, 다른 형태의 것도 가능해서 훨씬 더 융통성이 생겼다.

정리하면 리소스 매니저는 장비마다 있는 노드 매니저(Node Manager)를 통해 리소스를 관리하고, 어플리케이션 마스터는 어플리케이션 마다 할당되어 생성되며, 리소스 매니저와의 협상을 통해 실제 컴퓨팅 리소스를 사용한다.

By Apache Hadoop
이러한 변화는 아래의 Hadoop 스택을 통해서도 볼 수 있다. 즉 이제 MapReduce는 유일한 프로세싱 방법이 아니라, DAG(Directed Acyclic Graph, 방향성 비순환 그래프)로 일반화된 프로세싱 방법 위에서 돌아가는 하나의 어플리케이션일 뿐이다.

By DeZyre
결론적으로 YARN은 Hadoop의 클러스터 컴퓨팅 파워를 더 향상시켰다.
  • 확장성 : 매우 큰 동적인 클러스터를 효율적으로 관리할 수 있다
  • 호환성 : YARN은 기존의 MapReduce 어플리케이션과의 하위 호환성을 제공한다. 그래서 Hadoop 1.0에서 작성된 프로그램은 Hadoop 2.0에서도 동작한다. 
  • 효율성 : 클러스터의 각 장비의 컴퓨팅 능력을 최대로 활용하여, 컴퓨팅 용량을 증가시켰다. 
  • 다양한 워크플로우 지원 : MapReduce 뿐 아니라 그래프 프로세싱, 반복(Iterative) 모델링, 머신러닝 등의 다른 워크플로우도 지원한다. 


관련글 |
  - Hadoop.1 Hadoop 스택 개요
  - Hadoop.3 Hadoop 생태계 Zoo

댓글 없음:

댓글 쓰기

인기글