개요
Hadoop Eco System 에 대한 개념 정리를 목적으로 정리하겠습니다.
Hadoop Eco System
1. Hadoop Eco System 이란?
먼저, Hadoop Eco System은 크게 말하면 "다양한 서브 프로젝트들의 모임"이라고 말할 수 있습니다. Hadoop의 Core Project는 HDFS, MapReduce 이지만 그 외에도 다양한 프로젝트들이 많은데 이러한 프로젝트들의 모임을 Hadoop Eco System이라 지칭합니다.
1.1 Hadoop Eco System Architecture
Hadoop Eco System에 대한 Framework들의 구성도 입니다.
다음은 Hadoop Eco System의 구성도를 도식화한 것입니다.
HDFS
2. HDFS 란?
Hadoop Eco System의 Core Project인 HDFS에 대해서 먼저 설명드리도록 하겠습니다. HDFS는 크게 말해 "Hadoop 환경에서 분산 파일 시스템 기능을 담당"하고 있습니다. HDFS는 Google File System을 본 떠서 Open Source로 만들어졌고, 당시 데이터 환경의 가장 큰 고질병이었던 잦은 Node 실패에 대한 SW 해결이 주 목표로 설계 되어졌습니다. 이러한 목적으로 만들어진 Project가 HDFS 입니다.
2.1 HDFS Architecture
HDFS는 크게 NameNode와 DataNode로 이루어져 있습니다.
[NameNode]
- 파일 속성 정보나 파일 시스템 정보를 디스크가 아닌 '메모리'에서 직접 관리하는 역할을 수행합니다. (Metadata 관리)
- Slaves에 해당하는 DataNode의 I/O를 담당하고, DataNode의 이상유무를 체크하는 일을 처리합니다.
[DataNode]
- 자신에게 할당된 Data Block을 처리하는 역할을 수행합니다.
2.2 NameNode가 관리하는 Metadata 란?
NameNode가 관리하는 Metadata는 크게 6가지로 다음과 같습니다.
1) File Name
2) Directory
3) Data Block
4) User:Group
5) File Conf
6) Data Node와 Block 대응 정보
Metadata는 크게 Fsimage와 Edits로 이루어져 있습니다.
[Fsimage]
- 메모리 상에 관리되어 있는 메타데이터 내의 파일 시스템 이미지 입니다.
- 'File Name', 'Directory', 'Data Block', 'User:Group', 'File Conf', 'Data Block' 정보를 포함하고 있습니다.
[Edits]
- 파일 처리 시 로컬 파일 시스템에 생성되는 편집 로그입니다.
- 메모리 상에서 관리되고 있는 파일 시스템 이미지에 적용되어 집니다.
YARN
3. Yarn (분산 자원 관리) 이란?
Yarn은 '분산 환경에서의 자원관리를 담당'하는 역할을 수행합니다. 데이터를 확장성 있고 회복성 있는 방식으로 저장하는 것도 유용하지만 우리에게 가장 중요한 것은 데이터로부터 통찰을 얻어내는 것입니다. 데이터에 대한 '연산'이 필요하고, Hadoop 파일 시스템에 저장해야 할 정도의 큰 규모 대이터에 대해서도 연산이 가능하도록 '확장성'이 필요합니다. 또한 클러스터에 걸쳐 가용 자원의 사용 효율성을 높이고 데이터 접근 비용을 낮출 수 있도록 다양한 연산이 동시에 실행될 수 있어야 합니다.
따라서, 한정된 자원에서 요구사항을 충족시키려면 가용 연산 자원의 용량과 필요한 워크로드를 모두 알고 있는 중앙의 클러스터 매니저가 필요한데 이를 Yarn이 담당합니다.
3.1 Yarn 탄생 배경
Yarn 탄생 전 구성도
보시는 바와 같이 Job Tracker가 모든 부분에 관여합니다. 자원을 할당하고, 스케줄링 작업과 처리 중인 작업까지 모니터링을 진행합니다. 하위 노드에 해당하는 Task Tracker에게 Map and Reduce 작업을 부여하고, 하위 노드들은 주기적으로 그들의 진행상황을 Job Tracker에게 보고합니다.
따라서, 다음과 같은 구조 때문에 Task의 규모가 커지면서 하나 뿐인 Job Tracker에 부하가 걸리며 병목 현상이 발생하게 됩니다. 또한 컴퓨터의 자원이 비효율적으로 사용되어 지면서 이러한 문제점을 해결하기 위해 Yarn이 탄생하게 되었습니다.
보사는 바와 같이 Hadoop 1.x 에서 보이지 않던 Yarn Framework가 Hadoop 2.x에서 생겨난 것을 확인할 수 있습니다. Hadoop 2.x 에서는 Yarn을 추가해서 '자원관리 및 작업 스케줄링'에 대한 책임을 Yarn에게 인수하면서 MapReduce가 경량화 되었고, MapReduce 이외의 작업을 Hadoop이 처리할 수 있게 되면서 기존 구성도에서 가지고 있던 문제점을 해결할 수 있게 되었습니다.
3.2 Yarn Architecture
Yarn은 각 Worker Node 에 Node Manager Daemon을 실행시키며 Node Manager Daemon은 Master Process인 Resource Manager에 가상 코어의 단위로 얼마나 많은 연산 자원을 사용할 수 있는지, 해당 노드에 메모리가 얼마나 남아 있는지를 보고합니다.
Node Manager는 Local Node에 있는 컨테이너를 기동하고 모니터링하며, 할당 자원을 초과하는 컨테이너는 중단시키는 역할을 수행합니다.
[Resource Manager]
Master Daemon에서 구동 및 클러스터들로의 자원 할당을 관리합니다.
[Node Manager]
Slave Daemon에서 구동 및 각 단일 노드의 Task 실행을 담당합니다.
[Application Master]
개별적인 응용에서 필요로 하는 자원과 Job에 대한 Lifecycle을 관리합니다.
Node Manager와 함께 동작하며 작업의 실행을 모니터링 합니다.
[Container]
한 노드의 자원을 모아둔 패키지 입니다. (RAM, CPU, Network, HDD)
MapReduce
4. MapReduce (분산 데이터 처리) 란?
Hadoop은 원래 MapReduce를 위해 만들어졌습니다. 처음에는 클러스터에서 실행되는 독립형 Framework 였지만 Hadoop Project가 점점 더 많은 애플리케이션과 다양한 용도에 맞게 진화함에 따라 'Yarn에서 실행되는 Application'으로 바뀌었습니다.
4.1 MapReduce Architecture
[Client]
- 분석하고자 하는 데이터를 Job의 형태로 JobTracker에게 전달합니다.
[JobTracker]
- NameNode에 위치하고, Hadoop 클러스터에 등록된 전체 Job들을 스케줄링하고 모니터링을 수행합니다.
[TaskTracker]
- DataNode에서 실행되는 Daemon이며 DataNode에 위치합니다.
- 사용자가 설정한 MapReduce 프로그램을 실행합니다.
- JobTracker로부터 작업을 요청 받고, 요청 받은 Map과 Reduce 개수만큼 Map Task와 Reduce Task를 생성합니다.
- 위 상황들을 Job Tracker에게 보고합니다.
4.2 MapReduce 처리 과정
MapReduce의 연산은 크게 map, shuffle, reduce 이렇게 3단계로 나눠서 처리합니다. 위에서 보시는 바와 같이 Map 단계에서는 HDFS에서 읽은 데이터가 다수의 독립적인 Map Task로 나뉘어서 '병렬로 처리' 됩니다. 이상적으로 HDFS Block 하나당 하나의 Map Task가 배정되는 것이 이상적입니다.
shuffle 단계에서는 Map 단계에서의 결과물인 key:value 가 MapReduce에 의해 읽혀서 네트워크를 타고 Reduce Task의 입력값으로 전달합니다.
reduce 단계에서는 하나의 key에 대한 여러 value를 집계 또는 결합해서 입력값의 개수보다 더 작은 개수의 결과값을 산출합니다.
Zookeeper
5. Zookeeper 란?
Zookeeper는 '분산 애플리케이션을 위한 코디네이션 시스템'입니다. Hadoop Eco System에서 사용되는 회복성 있는 분산 설정 서비스 입니다. Zookeeper 안에서는 설정 데이터가 파일시스템과 Znode라는 노드 트리에 저장되고, 각 지노드는 데이터를 가지고 있으며 0개 이상의 자식 노드를 가질 수 있습니다.
클라이언트느 하나의 주키퍼 서버와 연결을 맺고 지노드를 생성/조회/수정/삭제할 수 있습니다.
5.1 Zookeeper Architecture
보시는 바와 같이 여러 대의 Server를 Cluster 형태로 구성하고 ZNODE라고 불리는 곳에 key:value 형태로 저장되어 집니다. 저장되는 데이터는 모두 메모리에 저장되어 지며 이로 인해 '처리량이 매우 크고 빠르다'는 장점을 가지고 있습니다.
여기서 ZNODE는 Zookeeper 내에 데이터를 저장하는 공간의 이름을 지칭하는 단어이며 '컴퓨터 폴더 구조와 유사'하다는 특징을 가지고 있습니다.
Oozie
6. Oozie (워크플로우) 란?
Oozie는 'Hadoop의 Job을 관리하기 위한 워크플로 스케줄링 시스템'입니다. Hive 쿼리나 MapReduce 작업처럼 Hadoop Eco System에서 실행되는 Task를 나타냅니다. 연쇄적으로 함께 실행돼야 하는 Action을 묶어서 워크플로우를 구성할 수 있습니다.
워크플로우는 코디네이터를 통해 스케줄링되고 코디네이터는 애플리케이션을 논리적으로 묶기 위해 그룹지어져서 번들을 구성합니다. 따라서 Oozie 작업은 워크플로우나 코디네이터 또는 번들을 의미합니다.
6.1 Oozie의 기능
여기서 Action은 Oozie에서 실행할 수 있는 하나의 작업 단위라고 할 수 있습니다. (MapReduce, Spark, Shell Script 등)
'BigData > Hadoop' 카테고리의 다른 글
[Hadoop] Zookeeper Install (0) | 2022.11.08 |
---|---|
[Hadoop] Zookeeper 란? (0) | 2022.11.08 |
[Hadoop] Hadoop 이란? (0) | 2022.09.27 |