분산 파일 시스템이란 ?
분산파일시스템
은 일반적으로 네크워크
로 연결된 여러 머신의 스토리지를 관리하는 파일 시스템
을 의미합니다. 이번 포스팅에서는 HADOOP을 구성하는 주요 컴포넌트 중 하나인 HDFS
에 대해 정리해 보도록 하겠습니다.
GFS
HDFS의 모태는 GFS이다. Master(masterserver) Worker(chunkserver) 구조를 가지고 있다.
HDFS
특징 : 범용하드웨어를 통한 분산파일시스템 구성, 파일을 블록단위 저장, 마스터 워커 구조, 데이터를 복제하여 내고장성 제공, 확장성 제공
블록
하나의 파일을 여러 블록으로 저장한다. 하둡 2는 기본 128MB, 하둡 1은 64MB가 기본이며, 실제 파일 크기가 블록 사이즈보다 적은 경우는 파일 크기만큼만 디스크를 사용한다.
HDFS에서 블록사이즈가 큰 이유?
탐색비용을 최소화 (Disk의 SEEK time을 최소화 한다.) 하드디스크에서 블록의 시작점을 탐색하는 시간을 줄이게 되고 메타 데이터 크기를 감소시킨다.
블록단위 처리 이점
물리디스크에 실제 저장할 수 있는 용량보다 더 큰 파일을 저장할 수 있다. 스토리지 관리가 단순화, 내고장성과 가용성을 지원하는 복제기능을 지원하기에도 유리하다.
HDFS의 구조
NameNode 파일시스템의 메타데이터를 가지고 있다(어떤 노드가 어떤 블록 데이터를 가지고 있는지 등) 메타데이터에는 FsImage(파일 시스템 이미지): 네임스페이스를 포함한 데이터의 모든 정보 EditLog: 데이터 노드에서 발생한 데이터의 변환내역 두가지를 의미한다. 데이터 노드를 관리한다.
Secondary NameNode NameNode의 Standby 역할이 아니라, FsImage와 EditLog를 주기적으로 병합(체크포인트)한다. 체크포인트는 왜 하나? -> NameNode가 시작되면 파일시스템의 내용을 로드 한 후, 변경사항을 저장하기 위한 EditLog의 정보를 반영한 후 HDFS를 사용할 수 있다. 이때 FsImage는 생성이 되고 나면 변경이 되지 않기 때문에 HDFS가 동작하면서 변경되는 내용은 EditLog에 반영되므로 계속 커지게 된다. 그러면 변경이력정보를 메모리에 반영하는 시간이 오래 걸린다. 따라서 Secondary Namenode는 이를 지원해준다.
주기적으로 NameNode의 FsImage를 백업한다.
Secondary Namenode 동작방식
(체크포인트 동작과정)
에딧로그에 먼저 롤링을 요청한다. (롤링): 현재까지의 로그를 새로운 이름으로 저장하고, 새로운 로그는 기존의 이름으로 생성하기 시작한다.
Secondary NameNode에서는 FsImage와 EditLog를 다운받는다.
이를 머지한다.
NameNode에 이를 전달하여 반영한다. (어 그러면 FsImage의 크기는 계속 커지는 게 아닌가?)
DataNode
실제 파일을 로컬 파일 시스템에 HDFS 데이터를 저장한다. NameNode 에 하트비트를 날려 상태를 확인시켜 준다. 블록의 변경상태를 리포트하여 주기적으로 NameNode에 알려준다.
NameNode, DataNode 동작방식
복제본을 구성하여 문제없이
HDFS 읽기 연산(요약)
- ClientNode에서 NameNode에게 파일이 저장된 블록정보를 요청한다.
- NameNode는 해당 블록이 어디에 저장되어 있는지 Client에 전달한다.
- ClientNode는 각 DataNode에게서 데이터를 읽어온다.
HDFS 쓰기 연산
- ClientNode에서 NameNode에게 파일 쓰기를 요청한다.
- NameNode에서는 파일을 써야 하는 노드 목록을 리턴해준다.
- ClientNode에서는 데이터터를 써야 할 노드들에게 데이터를 전달하고 쓰게 한다.
- 설정된 replication factor를 기준으로 노드간에 복제가 진행된다.
- 복제가 완료되면 Ack 정보를 받게 된다.
- Client에서 DataNode로 부터 모든 복제가 완료되었다는 Ack를 받게 되면 NameNode에게 작업이 완료되었다는 것을 알려준다.
HDFS 추가기능
- 블록캐싱 : 데이터 노드에 저장된 데이터 중에서 자주 읽는 블록 혹은 파일을 메모리에 캐싱한다.
- HDFS Federation : NameNode는 파일정보를 메타데이터(결국은 메모리)로 관리하는데 메타데이터가 계속 쌓이게 되면 메모리가 부족해지므로, 하둡2부터는 Federation을 통해 namespace 단위로 네임노드를 등록하여 사용한다. 각각의 디렉토리마다 네임노드를 등록하여 사용하도록 한다. (하둡2는 네임노드 최대 2개라며..?)
- 고가용성(HA)을 지원한다. Active - Standby. Standby상태인 NameNode는 Active 와 마찬가지로 동일한 메타데이터 정보를 유지하고 있다가, 액티브 네임노드를 대체한다. (주키퍼를 통해 지원)
다음은 YARN 포스팅