티스토리 뷰

Development/Big Data

[Hadoop] HDFS

Junchoi 2019. 12. 26. 23:28

HDFS(Hadoop Distributed File System)는 하둡의 핵심 구성요소의 하나로써 데이터를 분산하여 저장시키는 파일 시스템 입니다.

 

HDFS 저장방식

HDFS는 하나의 Name node(Master)와 여러대의 Data node(Slave)로 구성되어 있으며 file을 Block으로 분할하여 각 Block들을 Data node에 분산시켜 저장합니다.

Block의 사이즈는 기본 65MB 혹은 128MB이며 file이 block의 크기보다 작을 때는 block 크기 전체를 사용하지는 않습니다.

 

이 때  Block은 복제되어 복제된 block들이 여러 노드에 하나씩 저장됩니다.

default값은 3개이며 수정할 수 있습니다.

 

그리고 Name node에는 각 Bloock들이 어디에 위치해 있는지에 대한 정보를 포함한 metadata가 저장됩니다.

이 metadata를 사용하지 않으면 HDFS에 접근할 수 없게됩니다.

 

Name node

위 구조를 보시면 name node에서는 metadata 관리말고는 하는게 없어보이지만 실제로는 더 많은 작업을 담당합니다.

 

1. 클라이언트 접근통제

2. 데이터노드 모니터링 & block 관리

3. metadata 관리

 

먼저 클라이언트는 name node를 통해 block의 위치를 확인하고 이후 data node와 통신을 할 수 있습니다. 이 때 name node가 클라이언트의 권한을 확인하며 접근통제를 할 수 있습니다.

 

data node는 name node에게 heartbeat라는 것을 지속적으로 전송하는데(default 3초에 한번) name node는 이 heartbeat를 통해 data node의 상태를 체크합니다. 만약 heartbeat가 전송되지 않았다면 그 data node는 죽은 것으로 간주하여 다른 data node에게 죽은 data node의 데이터들을 복제하도록 명령을 하며 데이터를 유지시켜줍니다. 또한 block report라는 것도 name node에게 지속적으로 전송하는데 이 block report를 통해서 block의 새로운 정보에 맞게metadata의 내용을 갱신시켜줍니다.

 

metadata에는 file이 위차한 block의 위치정보뿐 아니라 file의 크기, 생성시간, 접근권한 등 file에 대한 여러 정보를 담고있습니다.

 

 

 

Name node에는 두 가지 mode가 있습니다.

1. High Availability mode ( CDH4 이후버전부터)

2. Classic mode

 

High Availiability mode에서는 Active name node와 Standby name node로 나뉘며 Active에서는 기본 name node의 역할을 수행하고 Standby에서는 Active가 장애가 발생했을 때 Active를 대처가능한 name node입니다.

 

Classic mode에서는 name node와 Secondary name node로 나뉘며 name node 장애 발생시 standby 처럼 대신하지는 못하지만 name node를 복구할 수 있는 정보를 제공해줍니다.

 

이렇게 두 가지의 name node로 구성된 이유는 name node가 장애로 인해 중단되면 클러스터에 접근이 불가능하기 때문에 장애시 대비하기 위함입니다.

 

Data node

Data node는 실제 데이터를 저장하고 있으며 name node에게 heartbeat와 block report를 지속적으로 전송하여 정상동작중인 사실과 데이터의 변경사항을 보고합니다.