- HDFS (Hadoop Distributed File System)?
- 대용량 데이터를 여러 컴퓨터에 분산해서 저장하고 관리하는 파일 시스템
- 특징
- 분산 저장(Distributed Storage)
: 데이터를 여러 개의 서버(노드)에 나누어 저장함으로써 대규모 데이터 저장이 가능, 데이터 처리 속도 향상
- 고장 허용(Fault Tolerance)
: 데이터의 복제(replication)를 통해 노드 장애가 발생하더라도 데이터 손실을 방지해. 일반적으로 데이터를 여러 노드에 복제해서 저장하기 때문에, 하나의 노드가 고장 나도 다른 노드에서 데이터를 읽을 수 있음.
- 데이터 지역성(Data Locality)
: 데이터를 처리하는 애플리케이션이 가능한 한 저장된 데이터 근처(같은 노드 또는 근처 노드)에서 실행되도록 설계해서 데이터 이동을 최소화해 성능을 높이는 방식임.
- 확장성( Scalability)
: 새로운 노드를 추가하거나 제거하는 방식으로 쉽게 시스템의 용량과 성능을 확장할 수 있음.

- HDFS 아키텍처 구성요소
- Client
: 사용자의 요청을 보내는 주체. 파일을 읽거나 쓰기 위해 HDFS에 접근함.
- NameNode
: HDFS의 중심 뇌. 파일의 메타데이터(어디에 저장이 되어 있는지, 어떠한 블록으로 나누어져 있는지 등)를 관리, 직접 데이터를 저장하지 않음.
- Secondary NameNode
: 흔히 오해되지만 백업 서버는 아님. NameNode 의 로그를 병합해 주는 역할을 수행하며 , 장애 복구 시 중요한 역할.
- DataNodes
: 실제 데이터 블록이 저장되는 노드들임. 클러스터 안에 여러 개 존재, 데이터는 이들 사이에 나뉘어 저장됨.
- Cluster Membership
: 클러스터에 어떤 노드가 참여 중인지, 정상적으로 작동하고 있는지를 관리하는 기능.
- 데이터의 흐름(fig1 참조)
1. Client가 파일 이름으로 데이터를 요청
2. NameNode가 해당 파일이 저장된 블록의 위치정보를 반환
3.Client는 실제 데이터를 DataNode에서 직접 읽음

- HDFS 데이터의 핵심 흐림(fig2참조)
- Client => NameNode
: 사용자가 파일을 읽거나 쓸 때, 우선 NameNode에 메타 데이터 요청을 보냄
- 쓰기(Write)
: NameNode가 어떤 DataNode에 데이터를 저장할지 정해줌. 이때 데이터는 여러 노드에 복제되며 보통 3개의 복제본이 생성됨.
- 복제 흐름
: 데이터를 쓰는 클라이언트는 첫 번째 DataNode에 데이터를 전송하고 그 DataNode는 또 다른 노드로 데이터를 전달함. 이 과정을 통해 데이터는 체인처럼 여러 곳에 자동 복제 됨.
- 읽기(Read)
: 사용자는 NameNode로부터 블록위치를 전달받고 , 가장 가까운 DataNode에서 직접 데이터를 읽음
※ Rack Awareness
:fig2에서는 Rack 1, Rack 2로 구성되어 있음. 이는 HDFS가 서버들이 어떤 랙(물리적 위치 그룹)에 있는지 알고 데이터를 분산시킨다는 뜻임. 이로써 장애가 발생하더라고 다른 랙에서 데이터를 복구할 수 있어 내결함성을 확보함.
- HDFS 활용 분야
- 빅데이터 처리(Hadoop, Spark 등과 함께 사용)
- 대규모 로그 분석
- 데이터 웨어하루징 및 데이터 분석 플랫폼 등
==> HDFS는 빅데이터를 효율적으로 처리하고 관리하기 위한 핵심 기반 시스템