프로그래밍/Data process

Hadoop 기본 구조 및 원리

Dibrary 2022. 9. 23. 09:50
반응형

안녕하세요 Dibrary입니다.

하둡은 조금 검색만 해도 수두룩히 많은 내용이 나오는 클러스터로 분산 저장, 처리를 할 수 있게 해 주는 프레임워크죠.

제 나름대로 이해하고 찾은 내용을 여기에 정리해보겠습니다. 처음 접하는 분들에게 도움이 되었으면 좋겠네요.


하둡의 특징

1. 데이터를 Block 단위로 나눠서 저장한다. (분산 저장 가능)
2. Scalability하다. 즉, 클러스터에 Node가 더 필요하면 추가하거나 줄일 수 있다. 
3. 처리하던 Node가 실패하면, 다른 Node로 작업을 할 수 있다.

간단하게 보면 위와 같은기능을 가지고 있습니다. 그럼 이 기능들이 어떻게 동작할 수 있는지 보죠.

 

하둡은 크게 Version1과 Version2로 나눌 수 있습니다. (Version3이 최근거지만, Version1에서 Version2로 바뀐것 만큼 매우 크게 바뀐건 아닙니다.)

하둡 version 1. 에서는 분산저장, 병렬처리 프레임워크를 정의했습니다.
분산저장은 NameNodeDataNode가 처리합니다.
NameNode(MasterNode)
metadata를 관리하고, Node를 관리합니다.
DataNode(SlaveNode)
에서 데이터를 Block 단위로 나눠서 저장하고 클러스터당 최대 4000개의 노드를 등록할 수 있습니다.

JobTracker는 전체 작업의 진행상황을 관리하고 자원관리도 처리합니다.
실제 작업(Map, Reduce)TaskTracker가 처리합니다.
병렬처리 작업 단위는 Slot이고, 작업 실행 시점에 역할이 정해지면 slot의 용도를 변경할 수 없으므로 Map 작업 중에 Reduce slot은 대기상태에 있습니다.

결국, Version 1에서는 기본골격인 NameNode, DataNode 구조가 있는게 핵심입니다.

출처:https://freewebsite1028.tistory.com/entry/loading-hadoop

근데, 잘 보면 각종 업무?를 NameNode 혼자 다 하기 때문에 만일 NameNode가 문제가 생기면 전체 클러스터를 못 쓰게 되는 것이죠. 이를 SPOF(single point of failure)이라고 합니다.

 

 

그래서 이를 방지하고자 Version 2에서는 YARN 아키텍처를 도입하고, 역할을 분담했습니다.

YARN JobTracker의 기능을 분리해서 자원관리는 Resource Manager, Node Manager 하고, 애플리케이션 라이프사이클 관리는 Application Master가 관리하고, 작업의 처리는 Container가 담당하게 했습니다.

자원관리와 애플리케이션 관리를 분리해서 클러스터당 최대 10000개의 노드를 등록할 수 있습니다.

각 구성 요소의 역할은 아래와 같습니다.

  • Resource Manager = 클러스터의 자원관리, Task 스케줄링. Client가 요청을 보내면 Resource Manager가 Application Master를 실행하고, Node Manager와 통신해 자원 상황을 확인하고, 필요 자원 관련정보를 알아낸다.
  • Node Manager = YARN의 Slave daemon이다. Container의 자원을 모니터링하고 Resource Manager로 보고하는 역할. Resource Manager의 지시를 받아 작업 요구에 따라 Container를 생성한다.
  • Application Master = 애플리케이션당 1개 생성되며, Resource Manager로부터 Container를 할당 받고, 애플리케이션 실행 상태 모니터링, 관리.
  • Container = CPU, Disk, Memory등의 자원을 의미한다. 모든 작업(Job)은 여러 작업(Task)로 세분화되고, 각 작업은 각각의 Container에서 실행된다.
  • Journal Node = NameNode의 Edit 정보를 저장하고 공유하는 기능 수행

 

그럼 결국 YARN으로 인해 Version 1.의 여러 문제가 해결되었다는 건데, 여기서 YARN은 어떻게 동작하는지 궁금하죠?

출처:https://mangkyu.tistory.com/127

 

  1. Client가 Resource Manager에게 요청 전송
  2. Resource Manager는 Application Master와 함께 애플리케이션을 등록 (애플리케이션ID가 생성되며 나중에 Client로 반환된다.)
  3. Resource Manager는 각각의 분리된 Container에서 Application Master를 구동한다.
  4. application Master는 Node Manager에게 Container의 실행 명령을 전달한다.
  5. Application 코드가 Container에서 실행된다.
  6. Client는 애플리케이션상태를 모니터링하기 위해 Resource Manager 및 Application Manager와 상태정보를 주고받는다.
  7. Application Master가 Resource Manager에서 등록해제된다.

 

 

하둡 Version 3. 에서는 JAVA8의 지원 시작, Ozone 추가, 기존 파일 복제방식 대신 Erasure Coding을 도입했습니다.

2.x 버전은 각각 다른 디스크에 3개의 블록을 만들어 보관하죠. (파일 1개를 저장하는 데 3배의 용량을 필요)
3.x
버전은 Erasure Coding은 파일을 N개 블록으로 나누면서 N의 절반인 M개의 Parity 블록을 생성하여 Fault-tolerance를 보장합니다.

 


분산 저장 외에 '분산 처리'도 한다고 처음에 얘기 했었던거 기억하시나요? Hadoop은 분산처리 즉, MapReduce도 합니다.

Map 단계는 입력된 데이터를 가공해 사용자가 원하는 정보를 Key, Value 쌍으로 변환합니다. 제일 먼저 Splitting 단계로 입력된 파일을 분할하죠. 하둡은 각 Split 마다 한 개의 Map Task를 생성하고, 생성된 Map TaskMap함수를 통해 Key, Value 구조를 가지는 중간 산출물을 생성하게 됩니다.

Shuffle 단계는 메모리에 저장된 Map 단계 산출물을 파티셔닝, 정렬 하고 Disk에 전달 후 Reduce로 넘깁니다.

Reduce 단계는 산출물을 하나로 합쳐 Reduce 함수로 전달하고, 만들어진 결과물은 HDFS에 저장됩니다.

 

MapReduce는 직접 코딩으로 해 줘야 하는데, 이게 쉽지 않아서 Spark같은 추상적 개념으로 다루는 도구들이 속속 나왔습니다.

728x90
반응형