http://www.aosabook.org/en/hdfs.html 

의 내용을 정리하였으며 웹 상에서 여러 다른 정보도 참조하였습니다. 




















8.HDFS

introduction

하둡 분산 파일 시스템(Hadoop Distributed File System, HDFS)은 기성 하드웨어에서 실행할 수 있도록 디자인된 분산 파일 시스템.

ㅇ 다른 분산 파일 시스템과의 차이점

HDFS  fault-tolerant 하고 저비용 하드웨어를 통해 배포할 수 있도록 설계됨.

HDFS는 응용 프로그램 데이터의 접근에 높은 처리량을 제공하고, 대용량 데이터 집합을 갖는 응용 프로그램에 적합

ㅇ 하둡의 중요한 특징은 수 없이 많은 데이타와 계산의 파티션, 병렬 계산의 실행임

ㅇ hdfs는 메타데이타와 데이타를 분리하여 저장한다.

namenode 에 메타 데이타 저장

datanode 에 데이타 저장

TCP 를 이용하여 서로 통신

ㅇ 목적

대용량 분산 파일 시스템에서 사용

ㅇ 높은 안정성

 –파일을 여러 개 복제하여 하드웨어 장애에 안정적임

 –결함 탐지와 자동 복구를 수행함

ㅇ 일괄처리 최적화

 –매우 높은 대역폭 제공

ㅇ 특징

ㅇ single-writer & multiple-reader 모델

ㅇ 전체 클러스터에 대한 하나의 namespace를 가짐

   ㅇ namespace는 계층적인 파일, 디렉토리를 가진다.

    –권한 등의 속성, 수정/접근 시간, 디스크 공간 할당량 등을 기록함

ㅇ 시스템의 메타데이터, 응용프로그램의 데이터를 분할하여 저장

 - 시스템 메타데이터: NameNode / 응용프로그램 데이터: DataNode

ㅇ 파일 내용을 블록단위로 분할 및 복제

- 각 블록은 독립적으로 여러 DataNode 에 복제 - replica (일반적으로 3)



<Read&Write에 대한 간략한 도식화는 http://bcho.tistory.com/650 의 프로세스와 순서 설명을 참고한다.>


Architecture

1. namenode

파일시스템의 namespace 를 관리 

 - 파일 목록 

 - 파일이름과 파일의 블록 목록 맵핑 

 - 블록과 DataNode 위치 맵핑 


그 외에도

 - 클라이언트의 요청 (읽기/쓰기

 - CheckpointNode , BackupNode 를 관리하며 image, checkpoint, journal 을 저장한다. 


2. image and journal

inodes name system 의 메타데이타를 저장하는 블록의 목록을 이미지라고 함

클라이언트의 시작 트랜잭션이 journal 에 기록하고 ack가 클라이언트로 전송되기 전에 저널 파일은 플러쉬 되고 동기화 된다


image 

- 파일시스템의 메타 데이터 

- inode data + 각 파일의 블록과 블록의 복제인 replica들의 목록 


checkpoint ( image에 대한 지속적인 기록을 위해서 사용 )

   - 파일 시스템의 메타데이터 보호 위해 사용하는 메커니즘. 


journal 

- image의 수정사항에 대한 쓰기 전에 commit 로그 ( 파일 시스템의 변경사항 기록 )


checkpoint journal 손상 대비하여 checkpoint, journal을 다른 볼륨이나 다른 서버에 저장 


3. datanodes

데이터노드는 로컬 파일 시스템의 파일에 HDFS 데이터를 저장

ㅇ 데이터노드는 HDFS에 관한 지식이 없음.

 - 로컬파일시스템에 분리된 파일들로 HDFS 블록을 저장 

ㅇ 파일을 같은 디렉토리에 생성하지 않음 

 - 디렉토리당 최적의 파일수를 판단하고 서브디렉토리 생성 

ㅇ 블록레포트 : 네임노드가 시작할때(주기적으로) 로컬파일시스템에 있는 모든 HDFS 블록들을 검사후 정상적인 블록의 목록을 만들어 네임노드에 전송


ㅇ 블록 서버로서의 역할 

- 응용 프로그램의 데이터 저장 

- 블록의 메타 데이터 저장 

- 클라이언트에게 데이터와 메타데이터 제공 

ㅇ Block Report (주기적으로 NameNode로 전송, Namespace에게 replica들의 위치를 알림 )


ㅇ heartbeat 

- 주기적으로 NameNode로 전송 

- 해당 replica가 사용 가능함을 알림    


ㅇ handshake 

- 시스템 시작 동안 각 DataNode NameNode가 수행 

- Namespace ID DataNode S/W 버전 불일치 시 자동 종료   

- Handshake 성공 후, DataNode는 자신의 storage ID NameNode에 등록



4. HDFS client 

사용자 응용 프로그램이 파일시스템에 접근 위해 사용 




- HDFS 클라이언트가 파일을 read할 경우 

1)replica들의 목록 및 위치를 알기 위해 NameNode에 요청

2)클라이언트와 가장 가까이에 있는 replica 확인 

3)DataNode에 직접 접근하여 원하는 replica의 전송 요청 







- HDFS 클라이언트가 파일을 write할 경우 

1)replicas 생성을 위해 NameNode DataNode로부터 블록 할당 요청 ( 권한 체크 

2)DataNode가 파이프라인을 구성하면 클라이언트는 첫 블록에 데이터 전송 

3)전송 완료 후 클라이언트는 DataNode에게 다음 replica를 위한 새로운 블록 선택 요청 

4)새로운 파이프라인이 구성되고 클라이언트는 데이터 전송 

5)복제가 모두 끝나면 Ack 를 보내고 파일 쓰기를 완료한다.



- 파이프 라인 구성 및 데이터 전송 

1)DataNode로부터 replica 들을 위한 블록들이 할당됨 

2)DataNode는 클라이언트에서 마지막 replica블록 까지의 전체 네트워크 거리를 최소화 하는 파이프라인 형성 

3)패킷 버퍼가 가득 차면 데이터가 파이프라인에 push




NameNode 는 또 다른 역할을 가질수가 있는데 checkpointNode 또는 BackupNode 로서의 역할이다. 

5 CheckpointNode

- 주기적으로 새로운 checkpoint 생성 

ㅇ checkpoint + journal = new checkpoint, empty journal 

ㅇ 파일 시스템의 메타데이터 보호 위해 존재하는 역할


6 BackupNode

- 파일시스템의 블록 위치를 제외한 모든 메타데이터 정보를 갖고 있음 

- 항상 NameNode 상태와 동기화 유지 

ㅇ namespace의 최신 데이터를 내부 메모리에 유지 

ㅇ NameNode 결함 시 BackupNode namespace 복구 



7 Upgrades and Filesystem Snapshots

ㅇ HDFS에서 스냅샷 생성 목적 

ㅇ 시스템 시작 시 클러스터 관리자 선택에 의해 스냅샷 생성 

 클러스터의 각 DataNode storage 디렉토리의 복사본과 실제 존재하는 block파일들의 하드링크 생성 

ㅇ DataNode에서 블록 삭제는 단지 하드링크만 제거하고 수정 시에는 복사, 쓰기를 수행 


8  

마스터/슬레이브 구조 로 관리됨

• HDFS 클러스터( 1.NN + N.DN )

 # 마스터 - 단일 네임노드  : 파일 시스템 네임스페이스를 관리(메타데이터)  

* 클라이언트에 의한 파일접근을 통제  

* 데이터노드의 블록 매핑 


# 슬레이브 

- 많은 데이터노드  : 스토리지를 관리  

* 파일은 여러개의 블록으로 분리되며 여러개의 데이터노드에 저장  

* 네임노드의 지시에 따라 블록 생성, 삭제, 복제 수행



 File I/O Operations and Replica Management

1 File Read & Write

- 위의 Hdfs Client 에서의 Read & Write 참조 


2 Block Replacement

replica 배치 정책 목적 

ㅇ HDFS를 다른 분산 파일 시스템과 구분 시킴 

ㅇ 데이터의 안전성, 신뢰성, 가용성, 네트워크 대역폭 이용 극대화 


ㅇ 하나의 DataNode에는 같은 블록의 replica를 하나만 포함해야 함 





3 Replication Management

ㅇ 하나의 rack은 같은 블록 replica를 두 개 이상 포함하지 않아야 함 Block Placement 

- 첫번째 replica : 로컬 rack의 하나의 노드에 배치 

- 두번째 replica : 로컬 rack의 다른 노드에 배치 

- 마지막 replica : 두 번째와 같은 rack의 다른 노드에 배치

- 추가적인 replica는 랜덤으로 배치 (기본적으로 3개의 replica 사용복사본이 두 개 이상의 rack에 저장되므로 하드웨어 장애에 안정적

4 Balancer

- HDFS 클러스터에서 디스크 공간 사용을 위한 균형 도구임. 


5 Block Scanner

DataNode가 주기적으로 replica들을 검사하여 저장된 checksum이 블록 데이터와 일치하는지 확인하는 도구 

ㅇ 손상된 replica블록 감지 시 ( 데이터를 보존하는 것을 목표로 하는 정책임)

-NameNode에 알리고 NameNode는 해당 replica를 손상된 것으로 표시 하고 바로 삭제 하진 않고 블록의 정상 replica를 추가로 생성 한다. 

-replica들 중 절반이 손상된 replica가 될 경우에만 손상된 replica를 삭제




참고자료 

http://www.aosabook.org/en/hdfs.html

http://bcho.tistory.com/650




블로그 이미지

[짱가™]

그 두번째 이야기 | 아키텍처에 대한 단상, 그리고 살아가는 이야기 | 대한 민국 아키텍트로 가는 길 | 열정전도사 "짱가|