HDFS: 네임노드·데이터노드가 대용량 파일을 나눠 갖는 방식
HDFS의 네임노드·데이터노드 아키텍처, 쓰기·읽기 프로세스, 고가용성 구성과 한계, 명령어까지 분산 파일 시스템의 동작 원리를 정리한다.
2026-08-13 · 최초 발행 2025-05-23
일반 하드웨어로 페타바이트를 다루는 파일 시스템
HDFS(Hadoop Distributed File System)는 대용량 데이터를 여러 서버에 분산 저장·처리하는 파일 시스템이다. Apache Hadoop의 핵심 컴포넌트로 빅데이터 에코시스템의 기반 인프라 역할을 한다. 일반 하드웨어(commodity hardware)로 대규모 클러스터를 구성할 수 있고, 데이터를 블록 단위(기본 128MB)로 쪼개 여러 노드에 분산 저장한다. 각 블록을 여러 노드에 복제(기본 복제본 3개)해 높은 내고장성(Fault Tolerance)을 확보하며, 한 번 쓰고 여러 번 읽는(Write once, read many) 스트리밍 접근 패턴에 최적화됐다. 대용량 파일 처리에 강하고, 데이터 지역성(Data Locality) 원칙을 활용한다.
마스터-슬레이브 구조: 네임노드와 데이터노드
네임노드(NameNode)는 HDFS의 마스터 서버다. 파일 시스템의 네임스페이스(디렉토리 구조, 파일 정보)를 관리하고 파일명·권한·블록 위치 같은 메타데이터를 메모리에 유지한다. 클라이언트 요청을 처리하고 데이터노드를 모니터링하며 파일 생성·삭제·이동 같은 파일 시스템 작업을 조정한다. 메타데이터는 EditLog와 FsImage 파일로 유지하는데, 이 구조 때문에 네임노드는 단일 실패 지점(SPOF, Single Point of Failure)이 될 수 있다.
데이터노드(DataNode)는 HDFS의 슬레이브 서버로 실제 데이터 블록을 물리적으로 저장한다. 정기적으로 네임노드에 하트비트(heartbeat)와 블록 리포트(block report)를 보내고, 데이터 블록의 읽기/쓰기 요청을 처리하며 네임노드 지시에 따라 블록을 복제·삭제한다. 각 데이터노드는 독립적으로 동작해 수평적으로 확장할 수 있다.
보조 네임노드(Secondary NameNode)는 네임노드의 백업이 아니라 보조 역할을 한다. 네임노드의 FsImage와 EditLog를 병합해 체크포인트를 만들고, 네임노드 장애 시 최신 체크포인트로 복구를 돕는다. 네임노드의 메모리 부담을 덜어주는 역할이다.
쓸 때와 읽을 때, 데이터는 이렇게 움직인다
쓰기 프로세스는 이렇게 진행된다. 클라이언트가 네임노드에 파일 생성을 요청하면 네임노드가 파일 메타데이터를 만들고 승인한다. 클라이언트는 파일을 블록 단위로 나누고, 각 블록에 대해 네임노드에 데이터노드 목록을 요청한다. 네임노드는 복제 정책에 따라 데이터노드 목록(파이프라인)을 돌려주고, 클라이언트는 첫 번째 데이터노드에 직접 데이터를 전송한다. 데이터는 파이프라인을 따라 복제본이 만들어지고, 모든 복제본 생성이 끝나면 클라이언트에 완료가 통보된다. 클라이언트는 마지막으로 네임노드에 파일 쓰기 완료를 알린다.
읽기 프로세스는 더 단순하다. 클라이언트가 네임노드에 파일 읽기를 요청하면 네임노드가 블록 위치 목록을 제공한다. 클라이언트는 네트워크 토폴로지를 고려해 가장 가까운 데이터노드에 직접 연결해 블록을 요청하고, 데이터노드가 데이터 블록을 전송한다. 블록 읽기가 실패하면 다른 복제본이 있는 데이터노드로 자동 전환된다.
네임노드 단일 장애점을 없애는 고가용성 구성
네임노드가 단일 실패 지점이 되는 문제를 풀려고 고가용성 아키텍처를 제공한다. 액티브-스탠바이(Active-Standby) 네임노드 쌍으로 구성하고, ZooKeeper로 자동 장애 감지와 페일오버(Failover)를 지원한다. 저널 노드(Journal Node)를 통해 두 네임노드가 편집 로그를 공유하고, 액티브 네임노드에 장애가 나면 스탠바이 네임노드가 즉시 액티브로 전환된다. HDFS 클라이언트는 ZooKeeper를 통해 현재 어느 네임노드가 액티브인지 파악한다.
내구성부터 할당량까지, HDFS가 더 갖춘 것들
데이터 블록 복제로 내고장성을 제공하고, 기본 복제 계수(replication factor)는 3이며 설정을 바꿀 수 있다. 랙 인식(Rack Awareness) 배치 전략으로 장애에 대응하는데, 첫 번째 복제본은 로컬 랙의 노드에, 두 번째는 다른 랙의 노드에, 세 번째는 두 번째 복제본과 같은 랙의 다른 노드에 둔다. 블록 스캐너(Block Scanner)로 데이터 무결성을 검사하고 체크섬(Checksum) 검증으로 손상을 탐지한다.
수평적 확장(Scale-out) 아키텍처라 데이터노드를 추가하는 것만으로 저장 용량이 늘어나고, 페타바이트 규모 데이터를 단일 클러스터에서 수천 개 노드로 처리할 수 있다.
데이터 지역성(Data Locality)은 "데이터에 가깝게 연산을 이동"시키는 원칙이다. 데이터가 저장된 노드에서 처리 작업을 수행해 네트워크 트래픽을 줄이고 처리 속도를 높이며, 랙 지역성·노드 지역성 등 여러 수준으로 적용된다.
스냅샷(Snapshot)은 특정 시점의 HDFS 디렉토리 상태를 보존해 실수로 인한 삭제나 손상 시 복구를 돕는다. 읽기 전용으로 유지되고 최소한의 추가 공간만 쓴다.
할당량(Quota) 관리는 디렉토리별 최대 파일 수(Name Quota)와 최대 저장 공간(Space Quota)을 제한할 수 있어 다중 사용자 환경에서 자원을 관리하는 데 쓴다.
모든 데이터에 맞는 것은 아니다
낮은 지연시간(Low Latency) 데이터 접근에는 부적합하고, 작은 파일이 많으면 비효율적이다 — 파일마다 네임노드 메모리에 메타데이터를 차지하고, 블록 크기보다 작은 파일도 전체 블록 공간을 할당받기 때문이다. 빈번한 데이터 수정에도 맞지 않는다(추가 전용 쓰기만 지원). 다중 작성자(Multiple Writer)를 지원하는 데도 제한이 있고, 네임노드 메모리 제약이 확장성의 한계로 작용하며, 복잡한 계층적 저장 구조를 관리하는 데도 제한적이다.
명령어로 다루는 HDFS
# 디렉토리 및 파일 조회
hdfs dfs -ls /path
# 파일 내용 보기
hdfs dfs -cat /path/to/file
# 파일 생성/업로드
hdfs dfs -put localfile /hdfs/path
# 파일 다운로드
hdfs dfs -get /hdfs/path localfile
# 디렉토리 생성
hdfs dfs -mkdir /path/dir
# 파일/디렉토리 삭제
hdfs dfs -rm /path/file
hdfs dfs -rm -r /path/dir
# 파일 복제 계수 변경
hdfs dfs -setrep -w 5 /path/file
# 파일 시스템 체크
hdfs fsck /path
# 안전 모드 관리
hdfs dfsadmin -safemode enter|leave|get
모니터링은 기본적으로 50070 포트(Hadoop 2.x) 또는 9870 포트(Hadoop 3.x)의 Web UI로 접근하고, JMX 메트릭스로도 확인할 수 있다. Ambari·Cloudera Manager 같은 관리 솔루션을 함께 쓸 수 있다.
실제로 쓰이는 자리들
빅데이터 분석에서는 대용량 로그 파일을 저장·처리하고 MapReduce·Spark 같은 분석 엔진과 통합해 데이터 웨어하우스·데이터 레이크를 구축한다. 페이스북은 일일 수백 TB의 로그 데이터를 HDFS에 저장해 사용자 행동을 분석한다.
데이터 아카이빙에서는 장기 보관 데이터를 비용 효율적으로 저장하고 규제 준수를 위해 보존한다. 금융 기관은 거래 내역을, 통신 회사는 통화 기록을 HDFS에 보관한다.
콘텐츠 저장·배포에서는 이미지·비디오·오디오 같은 멀티미디어 콘텐츠를 저장한다. 야후!는 사용자 생성 콘텐츠를 저장하는 데 HDFS를 활용했다.
과학·연구 데이터에서는 대규모 실험 데이터를 저장·처리한다. 유전체 분석, 기상 데이터, 천문학 관측 데이터가 여기 해당하고, CERN은 대형 강입자 충돌기(LHC) 실험 데이터를 HDFS에 저장한다.
이후에 더해진 것들
Erasure Coding은 복제 대신 데이터 인코딩으로 저장 효율을 높인다. HDFS Federation은 다중 네임노드를 지원해 확장성을 강화하고, 이종 저장소(Heterogeneous Storage)는 SSD·HDD 같은 다양한 저장 매체를 통합 관리한다. 클라우드 스토리지 통합은 S3·Azure Blob Storage 같은 서비스와 호환성을 넓히고, 컨테이너 환경 지원은 Kubernetes 위에서 HDFS를 운영할 수 있게 한다. 암호화와 세밀한 접근 제어 같은 보안 강화도 계속되고 있다.
HDFS는 대용량 데이터 저장·처리를 위한 핵심 인프라로 빅데이터 에코시스템의 기반이다. 분산 아키텍처로 확장성과 내고장성을 확보하고, 비용 효율적인 일반 하드웨어를 활용할 수 있으며, 데이터 지역성 원칙으로 효율적인 처리를 지원한다. 다양한 실제 비즈니스 사례에서 안정성이 검증됐고, 특성과 한계를 이해하고 적절한 사용 사례에 적용하는 것이 빅데이터 가치를 끌어내는 관건이다.