Hadoop 1.0 vs 2.0 정리

김도비·2022년 11월 13일
0

Bigdata

목록 보기
4/9

Hadoop1에 경우 써본적은 없지만 어떻게 발전이 되었는지 정리해두면 좋을 것 같다.

YARN 도입 배경

1). 효율적인 자원 관리

하둡 1.0에서는 TaskTracker은 MapReduce 작업을 할 때 slot로 구분된 고정된 크기를 정적할당하여 사용하였는데, 이는 Map/Reduce slot가 나눠져 있다는 것만으로도 리소스를 효율적으로 사용하지 못하는 경우도 많이 발생했다.
맵퍼는 모두 동작하는데 리듀서는 놀고 있거나 혹은 반대의 경우들이 생긴다는 문제가 있다.

그래서 하둡 2.0에선 Map/Reduce slot이 별도로 존재하지 않고 둘다 컨테이너 안에서 리소스 풀 안에서 동작하며 전체 클러스터의 리소스 상황과 요청된 Job에 리소스 요구에 따라 Container가 몇 개나 실행될지 등이 결정된다.

2). 확장성 범위 확대

Hadoop 1.0에서는 JobTracker는 하나의 노드이고 거기서 클러스터 전체의 리소스 관리와 실행중인 잡관리를 하다보니 4천대 이상의 클러스터나 4만개 이상의 테스크를 동시에 실행하지 못하는 문제점이 있었다.
YARN에서는 Resource Manager와 Application Master의 분리로 이 문제를 해결하였다.

3). 다양한 분산처리 환경 지원

Hadoop 2.0에서부터는 MapReduce 이외의 다른 분산처리 환경을 지원하며 YARN API를 이용하면 새로운 분산처리 환경의 개발이 가능해졌다는 점이다.

YARN의 도입으로 기존에 MapReduce의 배치처리방식 뿐만 아니라 Batch, Interactive, Realtime, Streaming의 네가지 주요 데이터 처리 방식을 모두 지원하게 되었다.

Hadoop 1.0

구성요소

  • NameNode
  • DataNode

Hadoop 주요 구성요소 NameNode, DataNode가 있고, Hadoop 위에서 작업을 실행하기 위한 MapReduce Job에 구성요소는 JobTracker, TaskTracker가 존재한다.

MapReduce Job은 다수의 Map/Reduce 태스크로 이루어지는데, JobTracker는 HDFS의 NameNode처럼 단일 마스터 노드로서 JOB에 MAP/REDUCE를 스케쥴링하고 관제한다. 만약 실패한 태스크가 있다면 다른 TaskTracker로 task를 재할당하고, TaskTracker는 태스크를 실행한다.

TaskTracker는 DataNode가 같은 노드에서 동작하는게 일반적이고, JobTracker는 NameNode와는 별도의 노드에서 동작하는게 좋다.
JobTracker도 단일 마스터 노드이기 때문에 NameNode처럼 SPOF 문제가 있다.
장애 발생 시 MapReduce Job이 모두 실패하고 복구 되기 전까지는 다시 실행할 수 없다.
JobTracker는 별도의 컴포넌트로 동작하지만 HDFS 위에서 동작하도록 설계되었다. 하지만 JobTracker와 TaskTracker의 장애는 HDFS 동작 환경에는 영향을 주지 않는다.

Hadoop Ver.2

Hadoop2로 넘어오게되면서 기존 JobTracker,TaskTracker가 사용되지 않고, 이를 대체하는 YARN을 사용하게됬다.

YARN 구성요소

  • ResourceManager
    • ApplicationsManager
    • Scheduler
  • NodeManager
  • ApplicationMaster
  • Container

ResourceManager라는 마스터 노드와 ApplicationsManager, Scheduler라는 두 개의 주요 컴포넌트로 이루어져 있고,
NodeManager는 DataNode가 동작하는 워커 노드에서 동작한다.

기존 Hadoop1에 JobTracker의 역할을 ResourceManager가 YARN의 마스터 노드로서 가져갔고, NodeManager는 TaskTracker의 역할을 가져가면서 각 워커 노드에서 동작하는 구조를 갖게 되었다.
마스터와 워커 노드 모두 기능에 따라 여러 프로세스로 나뉘어졌는데, ResourceManager는 클러스터 전체 리소스 내에서 다양한 종류의 애플리케이션이 동작할 수 있도록 총괄하는 역할을 담당하며,
각 스케쥴링과 애플리케이션 실행은 마스터 노드 내에서 함께 동작하는 Scheduler와 ApplicationsManager가 맡는다.

NodeManager은 마치 DataNode가 NameNode에게 heartbeat을 주기적으로 보내고 블록 리포트를 보내는것 처럼, 각 노드의 리소스를 관제하면서 ResourceManager에게 주기적으로 heartbeat와 리소스 관제 내용을 ResourceManage에게 보낸다.

YARN은 이렇듯 리소스 관리와 애플리케이션 스케쥴링과 모니터링 기능을 서로 다른 컴포넌트에서 동작하도록 역할을 분리했다.

YARN JOB 실행 방식

클라이언트로부터 JOB Application 제출되면 ApplicationsManager가 받아서 최초 ApplicationMaster를 위한 컨테이너 할당을 요청한다.

ApplicationMaster는 실행하기 위한 리소스 컨테이너를 Scheduler에게 요청하며, Scheduler는 애플리케이션의 실행을 스케쥴링 하면서 노드의 자원 상태에 따라 컨테이너를 할당한다.

워커 노드에 컨테이너를 생성하는 것은 각 NodeManager가 담당한다. 생성된 컨테이너들은 한정된 리소스를 사용하여 ApplicationMaster의 워커 노드로서 애플리케이션을 실행한다.

ApplicationMaster는 실행 상태를 관제하면서 컨테이너의 상태를 추적한다. 실행이 완료되면 ApplicationsManager에게 완료되었음을 알린다.

만약 완료 되기전에 문제가 발생해서 비정상 종료가 되면 ApplicationManager이 다른 워커 노드에 다시 할당하여 애플리케이션이 재시작할 수 있도록 한다.

profile
모든 걸 기록하자

0개의 댓글