HDFS는 블록 구조의 파일 시스템임
HDFS에 저장되는 모든 파일은 일정 크기의 블록으로 나뉘어 여러 서버에 분산되어 저장됨
블록의 기본 크기는 128MB이며, 변경 가능함(최근엔 서버 사양이 좋아져, 256MB, 512MB, 1G 등 다양하게 구성)
파일과 블록
하나의 파일은 하나 또는 복수 block에 저장
어떤 파일이 어느 block에 저장되어 있는지에 대한 정보는 메타데이터로 namenode가 메모리에서 관리
하나의 File 사이즈가 block의 크기를 넘어가면 여러 블록에 나누어 저장함
하나의 File 사이즈가 block의 크기보다 작다면, 하나의 File이 하나의 block을 모두 점유함(이 때문에 아주 작은 여러개의 파일들을 HDFS에 저장하는 것은 여러문제를 발생시킬 수 있음 - Small file issue)
실제 디스크를 점유하는 공간은 block 내에 file이 차지하는 크기임
Block System의 장점
Disk Seek time 감소
디스크 탐색 시간 = Seek time(데이터의 위치) + Search time(데이터 섹터에 도달)
하둡 개발 당시, 일반적인 HDD의 disk seek time은 10ms, disk I/O bandwidth는 100MB/s였음
HDFS는 seek time이 bandwidth의 1%를 사용하는 것으로 목표로 개발되어, 100MB를 넘지 않고 2^n으로 가까운 64MB를 선택함(Hadoop v1의 기본값 : 64MB)
Metadata size 감소
일반적인 파일시스템은 블록(page)의 크기가 4k ~ 8k이기 때문에 200MB크기의 데이터를 저장하기 위한 메타 데이터 5만개 이상 분을 관리해야 함
하지만 HDFS는 block 크기가 128MB이기 때문에 단 2개 블록에 해당하는 메타 데이터만 관리하면 됨
일반적으로 namenode에서 100만 개 블록을 저장할 경우, 1GB의 Heap memory를 사용하는 것으로 알려져 있음
Communication cost between Client and Namenode