번역 문서 보기
하둡 분산 파일 시스템: 구조와 설계
The Hadoop Distributed File System: Architecture and Design
by Dhruba Borthakur
Translated by INHWAN HWANG. http://www.virgo81.net / virgo81@gmail.com
목차
2. 가정과 목표 (Assumptions and Goals) 5
2.1. 하드웨어 실패 (Hardware Failure) 5
2.2. 스트리밍 데이터 접근 (Streaming Data Access) 5
2.3. 대용량 데이터 집합 (Large Data Sets) 5
2.4. 단순 간섭 모델 (Simple Coherency Model) 5
2.5. “데이터를 옮기는 것 보다 계산을 옮기는 것이 저렴하다.” (“Moving Computation is Cheaper than Moving Data”) 5
2.6. 이종 하드웨어와 소프트웨어 플랫폼으로의 이식성 (Portability Across Heterogeneous Hardware and Software Platforms) 6
3. 네임노드와 데이터노드 (Namenode and Datanodes) 7
4. 파일 시스템 네임스페이스 (The File System Namespace) 9
5. 데이터 복제 (Data Replication) 10
5.1. 복제 배치: 걸음마 (Replica Placement: The First Baby Steps) 10
5.2. 복제 선택 (Replica Selection) 11
5.3. 안전모드 (SafeMode) 11
6. 파일 시스템 메타데이터의 영속 (Persistence of File System Metadata) 11
7. 통신 프로토콜 (The Communication Protocols) 13
8. 견고성 (Robustness) 14
8.1. 데이터 디스크 실패, 심장 박동 그리고 재 복제 (Data Disk Failure, Heartbeats and Re-Replication) 14
8.2. 클러스터 재 균형 (Cluster Rebalancing) 14
8.3. 데이터 일관성 (Data Integrity) 14
8.4. 메타데이터 디스크 실패 (Metadata Disk Failure) 15
8.5. 스냅샷 (Snapshots) 15
9. 데이터 구성 (Data Organization) 16
9.1. 데이터 블록 (Data Blocks) 16
9.2. 옮겨 바꾸기 (Staging) 16
9.3. 복제 파이프라이닝 (Replication Pipelining) 16
10. 접근 성... 18
10.1. DFSShell 18
10.2. DFSAdmin. 18
10.3. 브라우저 인터페이스 (Browser Interface) 18
11. 공간 교정 (Space Reclamation) 19
11.1. 파일 삭제 및 복원... 19
11.2. 복제 인수 감소 (Decrease Replication Factor) 19
12. 참고문헌 (References) 20
1. 소개 (Introduction)
하둡 분산 파일 시스템(Hadoop Distributed File System, HDFS)은 기성 하드웨어에서 실행할 수 있도록 디자인된 분산 파일 시스템입니다. 그것은 기존의 분산 파일 시스템과 많은 유사성을 가지고 있습니다.
그러나, 다른 분산 파일 시스템과의 차이점은 매우 큽니다. HDFS는 상당히 내(耐)고장(fault-tolerant)하고 저비용 하드웨어를 통해 배포할 수 있도록 설계되었습니다. HDFS는 응용 프로그램 데이터의 접근에 높은 처리량을 제공하고, 대용량 데이터 집합을 갖는 응용 프로그램에 적합합니다.
HDFS는 파일 시스템 데이터의 스트리밍 접근을 가능하게 하기 위해 약간의 POSIX 요구사항을 게을리하였습니다. HDFS는 애초에 아파치 넛치(Apache Nutch) 웹 검색 엔진 프로젝트를 위한 하부 구조로써 만들어졌습니다.
HDFS는 아파치 루씬(Apache Lucene) 프로젝트의 부분인 아파치 하둡(Apache Hadoop) 프로젝트의 부분입니다. 프로젝트의 URL은 http://projects.apache.org/projects/hadoop.html 입니다.
2. 가정과 목표 (Assumptions and Goals)
2.1. 하드웨어 실패 (Hardware Failure)
하드웨어 실패는 예외와는 뚜렷하게 다른 기준입니다. HDFS 인스턴스는 파일 시스템의 데이터의 부분을 저장하는 서버 장비의 수백 또는 수천으로 구성될 수 있습니다. 사실 대단히 많은 구성요소가 존재하고 각 구성요소는 불분명한 실패의 확률을 갖습니다. 즉, HDFS의 일부 구성요소는 항상 기능을 수행하지 못합니다. 따라서 결함의 탐지와 빠르고 자동적인 복구는 HDFS의 핵심적인 구조적 목표입니다.
2.2. 스트리밍 데이터 접근 (Streaming Data Access)
HDFS에서 수행되는 응용 프로그램은 그들의 데이터 집합을 위하여 스트리밍 접근을 필요로 합니다. 그들은 일반적으로 일반적인 목적의 파일 시스템에서 수행되는 일반적인 목적의 응용 프로그램이 아닙니다. HDFS는 사용자에 의한 상호작용적(interactive) 사용 대신 배치 프로세싱에 더 적합하게 설계되었습니다. 강점은 데이터 접근의 낮은 지연(low latency)보다 데이터 접근의 높은 처리입니다. POSIX는 HDFS가 대상으로 하는 응용 프로그램이 필요로 하지 않는 많은 어려운 요구사항을 부과합니다. 약간의 키 영역들의 POSIX 의미론(semantics)은 데이터 처리율의 향상으로 교환되었습니다.
2.3. 대용량 데이터 집합 (Large Data Sets)
HDFS에서 수행되는 응용 프로그램은 대용량 데이터 집합을 가집니다. HDFS에서의 일반적인 파일은 기가 바이트부터 테라 바이트의 용량입니다. 따라서, HDFS는 대용량 파일들을 지원할 수 있도록 조정(tuned)되었습니다. 그것은 높은 총 데이터 대역폭과 단일 클러스터에서의 수백 노드로의 확장을 제공해야 합니다. 또한 단일 인스턴스에서 수 천만 파일을 제공해야 합니다.
2.4. 단순 간섭 모델 (Simple Coherency Model)
HDFS 응용 프로그램은 파일에 대해 한번 쓰고 여러 번 읽는(write-once-read-many) 접근 모델을 필요로 합니다. 파일이 한번 생성되고, 쓰여지고, 닫히면 변화를 필요로 하지 않습니다. 이런 가정은 데이터 간섭 이슈를 단순화하고 높은 처리량의 데이터 접근을 가능하게 합니다. MapReduce 응용 프로그램 또는 웹 크롤러 응용 프로그램은 이 모델에 완벽하게 적합합니다. 미래에는 파일에 추가-쓰기(appending-writes)를 제공할 계획이 있습니다.
2.5. “데이터를 옮기는 것 보다 계산을 옮기는 것이 저렴하다.” (“Moving Computation is Cheaper than Moving Data”)
응용 프로그램에 의해 요청된 계산은 만약 그것이 수행하는 데이터 근처에서 실행된다면 보다 더 효율적입니다. 이것은 데이터 집합의 사이즈가 대단히 클 때 특히 사실입니다. 이것은 네트워크 혼잡을 최소화 시키고 시스템의 전체적 처리량을 증가시킵니다. 가정은 응용 프로그램이 수행 되는 곳으로 데이터를 옮기는 것 보다 데이터 가까이로 계산을 옮기는 것이 더 낫다는 것 입니다. HDFS는 데이터가 위치한 곳 가까이로 그들을 옮길 수 있도록 응용 프로그램을 위한 인터페이스를 제공합니다.
2.6. 이종 하드웨어와 소프트웨어 플랫폼으로의 이식성 (Portability Across Heterogeneous Hardware and Software Platforms)
HDFS는 한 플랫폼에서 다른 플랫폼으로 쉽게 이식할 수 있도록 디자인되었습니다. 이것은 응용 프로그램의 대형 집합을 위한 선택의 플랫폼으로써 HDFS의 광범위한 적용을 용이하게 했습니다.
3. 네임노드와 데이터노드 (Namenode and Datanodes)
HDFS는 주/종 구조를 가지고 있습니다. HDFS 클러스터는 파일 시스템 네임스페이스를 관리하고 클라이언트에 의한 파일 접근을 통제하는 마스터 서버인 단일 네임노드로 구성됩니다. 추가적으로 클러스터에서 노드 당 하나며 노드에 붙은 스토리지를 관리하는 수 많은 데이터노드가 있습니다. HDFS는 파일 시스템 네임스페이스를 노출하고 사용자의 데이터를 파일로 저장되도록 허용합니다. 내부적으로 파일은 하나 또는 그 이상의 블록으로 쪼개지며 이러한 블록들은 데이터노드의 집합 안에 저장됩니다. 네임노드는 파일과 디렉터리의 열기, 닫기, 이름 변경과 같은 파일 시스템 네임스페이스 동작을 수행합니다. 또한 데이터노드로의 블록의 매핑을 판단합니다. 데이터노드는 파일 시스템의 클라이언트들로부터의 읽기와 쓰기 요청을 제공하는 역할을 합니다. 또한 네임노드의 지시에 따라 블록 생성, 삭제 그리고 복제를 수행합니다.