HDFS 사용자 가이드
HDFS 사용자 가이드
HDFS 클러스터를 실제로 운영하고 다룰 때 필요한 내용을 정리한 문서예요. 아키텍처가 "어떻게 만들어졌는지"를 설명했다면, 이 가이드는 "사용자와 관리자가 HDFS와 어떻게 상호작용하는지"를 다뤄요. 웹 인터페이스, 셸 명령, 네임노드 메타데이터 관리 방법을 하나씩 살펴볼게요.
본문
개요
HDFS 클러스터는 파일 시스템 메타데이터를 관리하는 네임노드(NameNode) 와 실제 데이터를 저장하는 데이터노드(DataNodes) 로 이뤄져요. 클라이언트는 파일 메타데이터나 수정 요청은 네임노드에 보내고, 실제 데이터의 읽기·쓰기는 데이터노드와 직접 주고받아요.
기본 설정만으로도 대부분의 설치 환경에서 바로 동작하도록 설계돼서, 설정을 손봐야 하는 경우는 보통 아주 큰 클러스터뿐이에요. 몇 가지 눈여겨볼 만한 기능을 꼽자면 다음과 같아요.
- 랙 인식(Rack awareness): 노드의 물리적 위치를 고려해 태스크를 스케줄링하고 저장 공간을 배치해요.
- 안전 모드(Safemode): 유지보수용 관리 모드예요.
fsck: 파일 시스템 건강 상태를 진단하고 누락된 파일이나 블록을 찾아내는 유틸리티예요.fetchdt: DelegationToken을 받아 로컬 파일에 저장하는 유틸리티예요.- Balancer: 데이터노드 사이에 데이터가 고르지 않게 쌓였을 때 클러스터를 균형 잡아주는 도구예요.
웹 인터페이스
네임노드와 데이터노드는 각자 내부 웹 서버를 띄워서 클러스터 상태를 보여줘요. 기본 설정에서 네임노드 첫 화면은 http://namenode-name:9870/ 이고, 여기서 데이터노드 목록과 클러스터 기본 통계를 볼 수 있어요. "Browse the file system" 링크로 파일 시스템을 탐색할 수도 있죠.
셸 명령(Shell Commands)
HDFS를 직접 다루는 셸 명령이 기본 제공돼요. 지원되는 전체 명령은 bin/hdfs dfs -help로, 특정 명령의 상세 도움말은 bin/hdfs dfs -help command-name으로 확인할 수 있어요. 파일 복사, 권한 변경 같은 일반 파일 시스템 작업 대부분을 지원하고, 파일 복제 인자 변경 같은 HDFS 고유 작업도 지원해요.
DFSAdmin 명령
HDFS 관리 작업은 bin/hdfs dfsadmin 명령으로 하며, 지원 명령 목록은 bin/hdfs dfsadmin -help로 볼 수 있어요. 주요 예시를 소개할게요.
-report: HDFS의 기본 통계를 보고해요. 네임노드 첫 화면에 나오는 정보와 겹치는 부분도 있어요.-safemode: 보통은 필요 없지만, 관리자가 수동으로 안전 모드에 들어가거나 나올 수 있어요.-finalizeUpgrade: 마지막 업그레이드 때 만든 이전 백업을 제거해요.-refreshNodes: 네임노드에 접속을 허용하는 데이터노드 목록을 갱신해요. 기본적으로dfs.hosts,dfs.hosts.exclude파일에 정의된 데이터노드 호스트명을 다시 읽어요.dfs.hosts에 있는 호스트만 클러스터에 등록할 수 있고,dfs.hosts.exclude에 있는 호스트는 페기(decommission) 대상이에요.-printTopology: 클러스터의 토폴로지를 출력해요. 네임노드가 바라보는 랙과 데이터노드의 트리를 보여줘요.
세컨더리 네임노드(Secondary NameNode)
네임노드는 파일 시스템 변경 사항을 edits 파일에 로그로 쌓아요. 시작할 때는 fsimage 이미지 파일을 읽고 edits 로그의 변경을 적용한 뒤, 새 상태를 fsimage에 쓰고 빈 edits로 새로 시작해요. 그런데 fsimage와 edits 병합이 시작 시점에만 일어나서, 바쁜 클러스터에서는 edits 파일이 점점 커질 수밖에 없어요. edits가 크면 다음 재시작도 느려지고요.
세컨더리 네임노드는 fsimage와 edits 로그를 주기적으로 병합해서 edits 크기를 한도 안으로 유지하는 역할을 해요. 메모리 요구량이 주 네임노드와 비슷한 수준이기 때문에 보통 다른 머신에서 실행해요.
체크포인트 시작은 두 설정이 제어해요.
dfs.namenode.checkpoint.period: 기본 1시간. 두 체크포인트 사이의 최대 간격이에요.dfs.namenode.checkpoint.txns: 기본 1백만. 주기가 되지 않았어도 이만큼의 미체크포인트 트랜잭션이 쌓이면 긴급 체크포인트를 강제해요.
체크포인트 노드(Checkpoint Node)
체크포인트 노드는 주기적으로 네임스페이스 체크포인트를 만들어요. 활성 네임노드에서 fsimage와 edits를 내려받아 로컬에서 병합하고, 새 이미지를 다시 활성 네임노드로 올려보내죠. 메모리 요구량이 네임노드와 비슷해서 보통 별도 머신에서 실행하며, 설정 파일에 지정한 노드에서 bin/hdfs namenode -checkpoint로 시작해요. 체크포인트(또는 백업) 노드의 위치와 웹 인터페이스는 dfs.namenode.backup.address, dfs.namenode.backup.http-address로 설정해요. 클러스터에 여러 체크포인트 노드를 둘 수도 있어요.
백업 노드(Backup Node)
백업 노드는 체크포인트 노드의 기능에 더해 항상 활성 네임노드와 동기화된 메모리 내 네임스페이스 복사본을 유지해요. 네임노드에서 파일 시스템 edits 저널을 받아 디스크에 저장하면서, 동시에 그 edits를 자신의 메모리 네임스페이스에도 적용해서 네임스페이스의 백업을 만들죠. 체크포인트 노드와 달리 백업 노드는 네임노드에 한 번에 하나만 등록할 수 있어요.
업그레이드와 롤백(Upgrade and Rollback)
업그레이드 후 예상치 못한 문제가 생기면 업그레이드 이전의 HDFS 상태로 롤백(rollback) 이 가능해요. 다만 롤백은 한 번의 업그레이드에 대해 한 번만 가능하기 때문에, 가능하면 업그레이드 전에 hdfs dfsadmin -saveNamespace로 네임스페이스를 먼저 저장해 두는 걸 권장해요.
파일 권한과 보안
HDFS 파일 권한은 Linux 같은 친숙한 플랫폼의 권한과 비슷하게 만들어졌어요. 현재 보안은 단순 파일 권한 수준으로 제한되어 있고, 네임노드를 시작한 사용자가 HDFS의 슈퍼유저로 취급돼요.
확장성(Scalability)
Hadoop은 수천 대 노드 규모의 클러스터에서 운영돼요. HDFS는 클러스터마다 네임노드가 하나라서, 네임노드의 총 메모리가 현재 최대 확장성을 제한하는 요인이에요. 아주 큰 클러스터에서는 저장되는 파일의 평균 크기를 키워 파일 수를 줄이면 메모리 부담 없이 클러스터를 키울 수 있어요.
더 알아보기
- HDFS 아키텍처 — HDFS 설계 원리와 네임노드·데이터노드 구조
- HDFS Commands Guide — HDFS 명령 사용법
- hdfs-default.xml — 대부분의 설정 변수에 대한 간단한 설명