HDFS (Hadoop Distributed File System)
HDFS는 하둡의 파일 시스템으로, 대용량 파일을 분산된 서버에 저장하고 그 데이터를 빠르게 처리할 수 있도록 만들어진 파일 시스템이다.
하둡의 특성 상 여러 컴퓨터를 병렬적으로 연결하여 데이터를 저장하는데, 이를 위해 만들어진 파일 시스템으로 볼 수 있다.
즉 기존의 DAS, NAS, SAN 등의 대용량 파일 시스템이 하나의 컴퓨터에 파일들을 저장했다면, HDFS는 여러개의 컴퓨터를 이용해 스토리지를 구성하게 된다.
HDFS의 특징
1) 블록 구조의 파일 시스템
HDFS는 대용량인 하나의 파일을 특정 크기의 블록으로 나누어 분산된 서버에 저장한다.
블록은 기본적으로 64MB, 하둡2에서는 128MB의 크기를 가진다.
물론 이러한 설정은 언제든 변경할 수 있다.
또한 HDFS는 3개씩 블록의 복제본을 저장한다. 즉, 하나의 블록을 저장하면 총 4개의 블록이 저장된다.
이 또한 환경설정 파일에서 개수 조절이 가능하다.
2) 마스터-슬레이브 아키텍처
HDFS는 마스터-슬레이브 아키텍처를 가진다.
여기서 마스터의 이름은 네임노드(NameNode), 슬레이브의 이름은 데이터노드(DataNode)이다.
네임노드는 사용자의 요청을 받고, 데이터노드를 관리하는 역할을 가진다.
데이터노드는 데이터를 실제로 저장한다.
2-1) 네임노드의 기능
기능 | 설명 |
메타데이터 관리 | -파일 시스템 이미지와 파일에 대한 블록 매핑 정보 관리 -클라이언트에 응답하기 위해 메모리 전체 메타데이터를 인메모리 방식으로 로딩하여 관리 -블록 위치 정보는 시스템이 시작할 때 데이터노드로부터 수신 -인메모리 : 파일과 메모리 양쪽에 데이터를 유지하는 방식 |
데이터노드 모니터링 | -데이터노드에 3초마다 하트비트를 수신. 일정기간 하트비트가 없을 경우 장애로 판단. -하트비트 : 데이터노드 상태 정보 + 저장된 블록 목록 |
블록 관리 | -장애 발생 데이터노드의 블록을 새로운 데이터노드에 복제 -용량이 부족한 데이터노드 존재 시 여유가 있는 데이터노드로 이동 -블록 복제본 수 관리 : 많으면 삭제, 적으면 추가 |
클라이언트 요청 접수 | -클라이언트는 네임노드를 통해서만 HDFS에 접근 가능. -저장 시 동일 파일 유무 및 권한 검사, 읽을 때는 블록 정보 반환 |
2-2) 데이터노드의 기능
클라이언트가 HDFS에 저장하는 파일을 로컬 디스크에 유지한다.
두 가지 데이터로 저장되는데, 하나는 실제 저장되는 로우 데이터 (raw data)이고, 다른 하나는 메타데이터가 저장된 파일이다.
2-3) 보조 네임노드
네임노드는 메타데이터의 정보를 메모리에 담아 처리한다.
그리고 이러한 특성상, 메모리가 사라지는 리부팅 시 메타데이터가 사라질 수 있다는 문제를 야기했다.
HDFS는 이러한 메타데이터 손실을 방지하고자 editslog와 fsimage 라는 이름의 두 개의 파일을 생성한다.
editslog는 HDFS의 모든 변경 이력을, fsimage는 메모리에 저장된 메타데이터의 파일 시스템 이미지를 저장한 파일들이다.
네임노드는 구동될 때 로컬에 저장된 fsimage와 editslog를 불러와 조회한다. 그리고 메모리에 fsimage 파일을 사용해 파일 시스템 이미지를 생성하고, editslog에 기록된 변경 이력을 생성한 파일 시스템에 적용한다. 그리고 로딩된 파일 시스템을 이용해 fsimage 파일을 갱신하고, editslog를 초기화하는 작업을 거친다.
그런데 서버가 오래동안 꺼지지 않았다면? 당연히 editslog에는 수많은 데이터가 쌓였을 것이다. 이러한 문제는 HDFS의 로딩에 긴 시간을 소비하게 만들었고, 이를 방지하고자 보조 네임노드가 등장했다.
보조 네임노드는 주기적으로 네임노드의 파일 시스템 이미지 파일을 갱신하도록 한다.
이러한 작업은 체크포인트라고 하기에, 보조 네임노드를 체크포인팅 서버라고 부르기도 한다.
보조 네임노드가 네임노드의 파일 시스템 이미지 파일을 갱신하면 fsimage 파일도 갱신되고, editlog의 파일도 축소되어 로딩에 긴 시간을 소비하지 않게 된다.
'IT 지식 > 빅데이터 & 분석' 카테고리의 다른 글
[빅데이터] Sqoop & Flume (0) | 2021.07.30 |
---|---|
[빅데이터] 하이브 (0) | 2021.07.29 |
[빅데이터] 하둡2와 얀(YARN) (0) | 2021.07.29 |
[빅데이터] 맵리듀스 (0) | 2021.07.29 |
[빅데이터] 빅데이터와 하둡 (0) | 2021.07.29 |