JUST WRITE

What is HDFS 본문

Data

What is HDFS

천재보단범재 2022. 3. 25. 19:51

HDFS

Hadoop Distributed File System

일반적인 Hardware들로 구성된 Cluster에서 대용량 파일을 처리하게 도와주는 시스템이다.

BigData 시대에 Data의 크기는 워낙 방대하다.

그러다 보니 하나의 좋은 성능의 Server로는 저장과 처리가 힘들고 비용도 크다.

대신 보통 성능의 Server를 여러 대를 두고 저장, 처리를 하면 훨씬 효율적이다.

HDFS는 큰 Data를 분산해서 처리하기 좋은 시스템이다.

HDFS는 GFS(Google File System) Architecture 에서 시작되었다.

위 그림에서 보면 Master-Slave 구조를 갖는다.

GFS master가 Master, GFS chunkserver가 Slave라고 보면 된다.

GFS chunkserver는 scale out를 통해 확장이 쉽다.

Hadoop의 HDFS는 GFS 논문을 바탕으로 만들어졌다.

특징

  • 다수의 Server들을 1개의 Cluster로 사용
  • Master-Slave 구조
    • NameNode가 Master, DataNode가 Slave
    • DataNode에서만 Data 저장
    • Client와 Data Read, Write는 DataNode를 통해서 통신 -> NameNode의 성능 향상을 위해
  • 파일을 Block 단위로 저장
  • Block Data의 복제본 유지 -> 신뢰성 보장(Default 3개)
  • Fault-Tolerance
  • Data 처리의 지역성 보장

Block

HDFS에서 파일을 저장할 때 여러 개의 Block으로 나누어서 저장한다.

설정에 따라 다르지만 기본 128MB 단위로 Block으로 나누어서 저장한다.

128MB으로 기본 Block 크기가 큰데 탐색 비용을 최소화할 수 있기 때문이다.

파일을 나눈 Block은 서버내 Data Node들에 나뉘어 저장된다.

Name Node에는 Data가 저장되지 않는다.

Block Replication

각 Block은 복제본(기본 3개)이 만들어져 각기 다른 Data Node들에 저장된다.

복제본 덕분에 Data 손실의 위험을 줄인다.

Data Node는 지속적으로 Name Node에 Hearbeat를 보내면서 Block Report를 한다.

Block Report를 통해 NameNode는 Node들에 있는 Block 정보를 갱신한다.

만약 Data Node가 장애가 나면 해당 Node에 있던 Block은 복제본이 있는 Node로 사용한다.

그리고 복제본 3개를 유지하기 위해 또 다른 Node에 해당 Block들을 복제한다.

Block Locality

Hadoop에서 처리는 TaskTracker라는 Daemon에서 처리한다.

TaskTracker는 보통 Data Node와 같은 Server에서 수행된다.

Data 처리는 MapReduce로 수행이 되는데 이 때 현재 Node에 있는 Block로 우선 처리한다.

Block Locality를 통해 분산시스템 처리 성능을 높인다.

Locality 처리 우선 순위는 다음과 같다.

  1. 같은 Node에 있는 Block
  2. 같은 Rack의 Node에 있는 Block
  3. 다른 Rack의 Node에 있는 Block

Block Caching

Data 중 자주 읽는 Block를 Block Cache라는 DataNode의 Memory에 명시적으로 Caching이 가능하다.

파일 단위로도 Caching이 가능해서 읽기 성능을 높일 수 있다.

NameNode

NameNode는 HDFS에 대한 Name Space를 관리한다.

DataNode로 부터 Block Report를 받아서 Name Space 정보를 최신으로 유지한다.

fsimage라는 스냅샷을 따로 관리하여 복구 시 사용된다.

지속적인 변경사항은 Edit Log로 관리된다.

Secondary NameNode

Secondary NameNode가 NameNode의 이중화 구성이 아니다.

주 역할은 fsimage와 Edit Log를 병합하고 병합한 것을 NameNode에 반영한다.

Edit Log는 fsimage 이후 시점의 변경사항을 저장한다.

fsimage를 최신화하고 Edit Log량을 줄이기 위해 진행된다.

주기적으로 병합이 진행되며 병합이 제대로 이뤄지지 않으면 Edit Log가 무지막지하게 쌓인다.

DataNode

DataNode는 물리적으로 HDFS Data를 저장한다.

Block Report를 NameNode에 주기적으로 전달한다.(NameNode가 시작할 때도 진행)

Rack Awareness

Hadoop은 운영할때 수십~수백대의 Server를 Cluster로 구성하여 운영한다.

On-premise 환경에서 Rack 단위로 Server가 구성되어 있다.

Rack단위로 장애가 생길 수도 있다.

Rack단위 장애를 대처하기 위해서 Block 복제본을 각기 다른 Rack에 있는 Node에서 저장되어 진다.

Hadoop 관리자가 따로 Node에 대한 Rack을 설정해줘야 한다.

 

728x90
반응형

'Data' 카테고리의 다른 글

What is Nifi  (0) 2022.11.21
What is MinIO?  (0) 2022.10.20
What is YARN  (0) 2022.03.27
What is MapReduce  (0) 2022.03.26
What is Grafana?  (0) 2022.02.23
Comments