http://www.aosabook.org/en/hdfs.html
의 내용을 정리하였으며 웹 상에서 여러 다른 정보도 참조하였습니다.
8장.HDFS
introduction
ㅇ 하둡 분산 파일 시스템(Hadoop Distributed File System, HDFS)은 기성 하드웨어에서 실행할 수 있도록 디자인된 분산 파일 시스템.
ㅇ 다른 분산 파일 시스템과의 차이점
HDFS는 fault-tolerant 하고 저비용 하드웨어를 통해 배포할 수 있도록 설계됨.
HDFS는 응용 프로그램 데이터의 접근에 높은 처리량을 제공하고, 대용량 데이터 집합을 갖는 응용 프로그램에 적합
ㅇ 하둡의 중요한 특징은 수 없이 많은 데이타와 계산의 파티션, 병렬 계산의 실행임
ㅇ hdfs는 메타데이타와 데이타를 분리하여 저장한다.
namenode 에 메타 데이타 저장
datanode 에 데이타 저장
TCP 를 이용하여 서로 통신
ㅇ 목적
대용량 분산 파일 시스템에서 사용
ㅇ 높은 안정성
–파일을 여러 개 복제하여 하드웨어 장애에 안정적임
–결함 탐지와 자동 복구를 수행함
ㅇ 일괄처리 최적화
–매우 높은 대역폭 제공
ㅇ 특징
ㅇ single-writer & multiple-reader 모델
ㅇ 전체 클러스터에 대한 하나의 namespace를 가짐
ㅇ namespace는 계층적인 파일, 디렉토리를 가진다.
–권한 등의 속성, 수정/접근 시간, 디스크 공간 할당량 등을 기록함
ㅇ 시스템의 메타데이터, 응용프로그램의 데이터를 분할하여 저장
- 시스템 메타데이터: NameNode / 응용프로그램 데이터: DataNode
ㅇ 파일 내용을 블록단위로 분할 및 복제
- 각 블록은 독립적으로 여러 DataNode 에 복제 - replica (일반적으로 3개)
<Read&Write에 대한 간략한 도식화는 http://bcho.tistory.com/650 의 프로세스와 순서 설명을 참고한다.>
Architecture
1. namenode
파일시스템의 namespace 를 관리
- 파일 목록
- 파일이름과 파일의 블록 목록 맵핑
- 블록과 DataNode 위치 맵핑
그 외에도
- 클라이언트의 요청 (읽기/쓰기)
- CheckpointNode , BackupNode 를 관리하며 image, checkpoint, journal 을 저장한다.
2. image and journal
inodes 와 name system 의 메타데이타를 저장하는 블록의 목록을 이미지라고 함
클라이언트의 시작 트랜잭션이 journal 에 기록하고 ack가 클라이언트로 전송되기 전에 저널 파일은 플러쉬 되고 동기화 된다
image
- 파일시스템의 메타 데이터
- inode data + 각 파일의 블록과 블록의 복제인 replica들의 목록
checkpoint ( image에 대한 지속적인 기록을 위해서 사용 )
- 파일 시스템의 메타데이터 보호 위해 사용하는 메커니즘.
journal
- image의 수정사항에 대한 쓰기 전에 commit 로그 ( 파일 시스템의 변경사항 기록 )
checkpoint나 journal 손상 대비하여 checkpoint, journal을 다른 볼륨이나 다른 서버에 저장
3. datanodes
데이터노드는 로컬 파일 시스템의 파일에 HDFS 데이터를 저장.
ㅇ 데이터노드는 HDFS에 관한 지식이 없음.
- 로컬파일시스템에 분리된 파일들로 HDFS 블록을 저장
ㅇ 파일을 같은 디렉토리에 생성하지 않음
- 디렉토리당 최적의 파일수를 판단하고 서브디렉토리 생성
ㅇ 블록레포트 : 네임노드가 시작할때(주기적으로) 로컬파일시스템에 있는 모든 HDFS 블록들을 검사후 정상적인 블록의 목록을 만들어 네임노드에 전송
ㅇ 블록 서버로서의 역할
- 응용 프로그램의 데이터 저장
- 블록의 메타 데이터 저장
- 클라이언트에게 데이터와 메타데이터 제공
ㅇ Block Report (주기적으로 NameNode로 전송, Namespace에게 replica들의 위치를 알림 )
ㅇ heartbeat
- 주기적으로 NameNode로 전송
- 해당 replica가 사용 가능함을 알림
ㅇ handshake
- 시스템 시작 동안 각 DataNode와 NameNode가 수행
- Namespace ID와 DataNode S/W 버전 불일치 시 자동 종료
- Handshake 성공 후, DataNode는 자신의 storage ID를 NameNode에 등록
4. HDFS client
사용자 응용 프로그램이 파일시스템에 접근 위해 사용
- HDFS 클라이언트가 파일을 read할 경우
1)replica들의 목록 및 위치를 알기 위해 NameNode에 요청
2)클라이언트와 가장 가까이에 있는 replica 확인
3)DataNode에 직접 접근하여 원하는 replica의 전송 요청
- HDFS 클라이언트가 파일을 write할 경우
1)replicas 생성을 위해 NameNode가 DataNode로부터 블록 할당 요청 ( 권한 체크
2)DataNode가 파이프라인을 구성하면 클라이언트는 첫 블록에 데이터 전송
3)전송 완료 후 클라이언트는 DataNode에게 다음 replica를 위한 새로운 블록 선택 요청
4)새로운 파이프라인이 구성되고 클라이언트는 데이터 전송
5)복제가 모두 끝나면 Ack 를 보내고 파일 쓰기를 완료한다.
- 파이프 라인 구성 및 데이터 전송
1)DataNode로부터 replica 들을 위한 블록들이 할당됨
2)DataNode는 클라이언트에서 마지막 replica블록 까지의 전체 네트워크 거리를 최소화 하는 파이프라인 형성
3)패킷 버퍼가 가득 차면 데이터가 파이프라인에 push
NameNode 는 또 다른 역할을 가질수가 있는데 checkpointNode 또는 BackupNode 로서의 역할이다.
5 CheckpointNode
- 주기적으로 새로운 checkpoint 생성
ㅇ checkpoint + journal = new checkpoint, empty journal
ㅇ 파일 시스템의 메타데이터 보호 위해 존재하는 역할
6 BackupNode
- 파일시스템의 블록 위치를 제외한 모든 메타데이터 정보를 갖고 있음
- 항상 NameNode 상태와 동기화 유지
ㅇ namespace의 최신 데이터를 내부 메모리에 유지
ㅇ NameNode 결함 시 BackupNode로 namespace 복구
7 Upgrades and Filesystem Snapshots
ㅇ HDFS에서 스냅샷 생성 목적
ㅇ 시스템 시작 시 클러스터 관리자 선택에 의해 스냅샷 생성
ㅇ 클러스터의 각 DataNode는 storage 디렉토리의 복사본과 실제 존재하는 block파일들의 하드링크 생성
ㅇ DataNode에서 블록 삭제는 단지 하드링크만 제거하고 수정 시에는 복사, 쓰기를 수행
8
마스터/슬레이브 구조 로 관리됨
• HDFS 클러스터( 1.NN + N.DN )
# 마스터 - 단일 네임노드 : 파일 시스템 네임스페이스를 관리(메타데이터)
* 클라이언트에 의한 파일접근을 통제
* 데이터노드의 블록 매핑
# 슬레이브
- 많은 데이터노드 : 스토리지를 관리
* 파일은 여러개의 블록으로 분리되며 여러개의 데이터노드에 저장
* 네임노드의 지시에 따라 블록 생성, 삭제, 복제 수행
File I/O Operations and Replica Management
1 File Read & Write
- 위의 Hdfs Client 에서의 Read & Write 참조
2 Block Replacement
replica 배치 정책 목적
ㅇ HDFS를 다른 분산 파일 시스템과 구분 시킴
ㅇ 데이터의 안전성, 신뢰성, 가용성, 네트워크 대역폭 이용 극대화
ㅇ 하나의 DataNode에는 같은 블록의 replica를 하나만 포함해야 함
3 Replication Management
ㅇ 하나의 rack은 같은 블록 replica를 두 개 이상 포함하지 않아야 함 Block Placement
- 첫번째 replica : 로컬 rack의 하나의 노드에 배치
- 두번째 replica : 로컬 rack의 다른 노드에 배치
- 마지막 replica : 두 번째와 같은 rack의 다른 노드에 배치
- 추가적인 replica는 랜덤으로 배치 (기본적으로 3개의 replica 사용) 복사본이 두 개 이상의 rack에 저장되므로 하드웨어 장애에 안정적
4 Balancer
- HDFS 클러스터에서 디스크 공간 사용을 위한 균형 도구임.
5 Block Scanner
DataNode가 주기적으로 replica들을 검사하여 저장된 checksum이 블록 데이터와 일치하는지 확인하는 도구
ㅇ 손상된 replica블록 감지 시 ( 데이터를 보존하는 것을 목표로 하는 정책임)
-NameNode에 알리고 NameNode는 해당 replica를 손상된 것으로 표시 하고 바로 삭제 하진 않고 블록의 정상 replica를 추가로 생성 한다.
-replica들 중 절반이 손상된 replica가 될 경우에만 손상된 replica를 삭제
참고자료
http://www.aosabook.org/en/hdfs.html
'개발의 즐거움 > Architecture' 카테고리의 다른 글
AOSA 1권 9장. CI 정리 (0) | 2012.10.12 |
---|---|
엔터프라이즈 환경에서 아키텍처 팀의 역할 (0) | 2012.07.08 |
아키텍트의 역할과 자질에 대한 고찰 (0) | 2012.07.08 |
프로젝트 에서 아키텍처 팀의 역할 (0) | 2011.04.20 |
아키텍트 직무 역할 (3) | 2011.03.22 |