1. 서론
이번 포스팅에서는 대용량 처리 프레임워크인 Hadoop에 대해 간략히 소개하려고 합니다.
소개 목차로는 아래와 같습니다.
- 하둡이란?
- Hdfs란?
- mapreduce란?
- yarn이란?
2. 하둡이란?
하둡은 아파치에서 오픈소스로 제공한 분산 처리 프레임워크입니다.
여러개의 컴퓨터를 클러스터화 하여 대용량 데이터를 분산처리하도록 하는것이 목적입니다.
그로인해, 하둡은 빅데이터의 열쇠라고도 불리기도 합니다.
그렇다면, 하둡은 대략적으로 무엇을 하는지 아래 사진을 통해 설명하도록 하겠습니다.
1) NameNode
하둡에서는 데이터를 block( default = 64M ) 단위로 관리합니다. ( 아래 설명할 HDFS 입니다. )
NameNode는 데이터 block이 어디 DataNode에 있는지를 관리합니다.
관리의 의미로는 read시 어느 데이터 노드에 작업을 할당해야하는지와 write시 여유로운 데이터 노드를 찾아 작업 할당을 할지를 의미합니다.
만약, NameNode가 죽는다면 관리하고 있던 정보가 사라져 데이터를 얻을 수 없게됩니다.
이를 위해 하둡에서는 별도 FS에 데이터를 동기화하며, NameNode가 죽었을 시
Secondary NameNode는 별도 FS에서 NameNode의 관리 정보를 가져와 새 NameNode에게 할당합니다.
마지막으로 NameNode는 메타데이터를 관리하기 위해 EditLog와 FsImage 파일을 사용합니다.
- EditLog = HDFS의 메타데이터에 대한 모든 변화를 기록하는 로그 파일.
- FsImage = 파일 시스템의 네임스페이스(디렉토리명, 파일명, 상태 정보)와 파일에 대한 블록 매핑 정보를 저장하는 파일.
2) Secondary NameNode
위 EditLog와 FsImage를 주기적으로 병합하는 역할을 합니다.
하둡 2.x 버전 부터는 Secondary NameNode를 두지 않고 NameNode를 HA 구성으로 아키텍쳐를 변경하였습니다.
이때, HA 구성한 NameNode는 Active-Standby 구조입니다.
3) DataNode
데이터노드는 파일 block을 저장하고 제공하는 역할을 합니다.
Client가 데이터 읽기,쓰기 요청을 보낸다면 먼저 NameNode는 요청 데이터에 맞는 데이터 노드를 탐색 후
Client는 탐색 된 DataNode와 통신하여 데이터를 읽고 쓰게됩니다.
또한, DataNode는 NameNode에게 자신의 정보를 전달합니다.
- 클러스터가 처음 시작될 때, 각 DataNode는 block 정보를 NameNode에게 전달
- 주기적으로 NameNode에게 Heartbeat와 블록 목록 정보를 전달
- 변경사항이 발생할 때마다 NameNode에게 변경사항 전달
4) JobTracker
JobTracker는 일반적으로 NameNode에서 실행시키는 하나의 프로세스입니다.
역할로는 TaskTracker의 리소스를 관리하여, MapReduce 작업 요청시 작업을 알맞는 TaskTracker에서 할당합니다.
또한, TaskTracker가 실패하면 다른 TaskTracker에게 재할당 합니다.
5) TaskTracker
TaskTracker는 실제로 Task를 처리하는 프로세스입니다.
DataNode에는 하나의 TaskTracker만 존재하며, 여러개의 Map과 Reduce를 실행합니다.
여러개의 Map과 Reduce를 수행할 수 있기에, 동시에 여러 Task가 처리 가능하고 max Task 갯수는 설정으로 조절가능합니다.
3. Hdfs란?
Hdfs는 Hadoop Distributed File System의 약자로 하둡 시스템에서 제공하는 파일 시스템입니다.
하둡 클러스터의 데이터 노드들에 데이터를 block 단위로 저장하여 대용량 파일 저장이 가능합니다.
장점은 아래와 같습니다.
- block 단위로 파일을 나눠 적재. ( default = 64M )
- 파일에 대해 replication 수행. ( default =3 )
- Scale-out이 가능으로 인해 필요시 용량 증설 가능.
- 스트리밍 데이터 엑세스 지원
- 저사양 하드웨어를 클러스터화하여 고성능 제공
4. mapreduce란?
mapreduce는 대용량 데이터를 분산처리하기 위한 모델입니다.
하둡에서 제공하는 MapReduce는 아래 그림으로 설명이 됩니다.
하둡의 TaskTracker는 각 Mapper와 Reducer를 생성합니다.
Mappper는 input 데이터를 line-by-line으로 읽으며 (key, value)로 만들어 주는 역할을 수행하며,
Reducer는 Mapper에서 넘어온 (key, value)를 merge하는 역할을 수행합니다.
이때, Mapper와 Reducer 사이에는 Shuffliing 과정이 존재합니다.
Shuffliing은 Mapper의 출력데이터를 Reducer에 전달하기 위한 일련의 과정입니다.
이 일련의 과정에서는, 파티셔너와 정렬이 존재합니다.
Mapper의 출력데이터는 memory 버퍼에 저장 후 버퍼가 기준치만큼 차게되면 disk에 write하게 됩니다.
파티션을 생성하며, 파티셔너는 동일 key에 대해 List<value>로 묶어주는 역할을 합니다.
또한, Mapper 끝나기 직전 disk에 write한 파일들은 정렬된 한개의 파일로 만들어 Reducer에게 전달하게 됩니다.
그렇기 때문에, 위 그림의 shuffling 과정에서 key 별로 value list를 가지고 있으며, Bear -> Car -> Deer와 같이 정렬된 것을 볼 수 있습니다.
5. yarn이란?
yarn은 Yet Another Resource Negotiator의 약어로 리소스 할당 및 관리를 위해 나온 서비스입니다.
기존 Mapreduce의 jobtracker - tasktracker에는 아래와 같은 단점이 존재했습니다.
- 맵리듀스의 단일 고장점
- jobtracker는 모든 mapreduce의 요청을 받으며, jobtracker에 문제가 생긴다면 모든 mapreduce는 수행할 수 없는 fail point 입니다.
- 클러스터의 확장성
- 단일 클러스터에서 최대 4천대, 동시 실행 태스크 4만개가 한계
- 맵리듀스의 리소스 관리
- slot이라는 개념으로 자원을 관리함으로 mapper와 reducer의 자원을 효율적으로 사용하지 못함.
- mapreduce가 아닌 다른 서비스로 인한 자원 영향은 파악 불가능.
위의 단점들로 인해, 아래와 같이 yarn을 Mapreduce대신 hdfs 위에 올리는 아키텍쳐로 변경하게 되었습니다.
yarn은 총 4개의 새로운 컴포넌트들을 제공하고 있습니다.
- resource manager
- node manager
- container
- applicaton master
1) resource manager
기존 jobtracker를 대체하는 컴포넌트입니다.
클러스터의 자원 관리, 태스크의 스케쥴링, 태스크가 수행할 수 있는 노드를 찾아주는 역할을 담당합니다.
2) node manager
기존 tasktracker를 대체하는 컴포넌트입니다.
모든 데이터 노드에서 수행되며 container를 생성하여 container의 라이프 사이클을 모니터링하는 역할을 수행합니다.
3) container
데이터 노드의 리소스 메트릭이라고 생각하시면 됩니다. ( CPU, Disk, Memory, Network 등 )
node manager는 이 container의 메트릭 상태를 보고 resource manager에게 보고하게 됩니다.
4) application master
하나의 application을 관리하는 컴포넌트입니다.
client가 2개의 태스크를 요청한다면 2개의 application master가 생성되어 가 application를 관리하게 됩니다.
이 4개의 서비스로 인해 위의 jobtracker의 단점들을 해결하였습니다.
마지막으로, 아래는 yarn의 아키텍쳐입니다.
6. 마무리
이번 포스팅에서는 간략히 Hadoop에 대해 알아봤습니다.
다음 포스팅에서는 Hadoop 설치 포스팅을 진행하도록 하겠습니다.
'BigData > Hadoop' 카테고리의 다른 글
(4) Hive (0) | 2020.03.10 |
---|---|
(3) Hadoop 사용법 (0) | 2020.03.09 |
(2) Hadoop 설치 (0) | 2020.03.05 |