Hadoop분산 파일시스템 #2
- Hadoop/Hadoop 분산파일시스템#2
- 2021. 2. 2.
1. HDFS
HDFS는 Hadoop Distributed File System의 약자이다. 수십 테라바이트 또는 페타바이트 이상의 대용량 파일을 분산된 서버에 저장하고, 그 저장된 데이터를 빠르게 처리할 수 있게 하는 파일시스템이다. 또한 저사양의 서버를 이용해서 스토리지를 구성할 수 있어 기존의 대용량 파일시스템(NAS,DAS,SAN등)에 비해 장점을 가진다. HDFS는 블록 구조의 파일 시스템이다. 파일을 특정크기의 블록으로 나누어 분산된 서버에 저장된다. 블록크기는 64MB에서 하둡 2.0 부터는 128MB로 증가되었다.
2. 네임노드와 데이터 노드
HDFS는 네임노드(마스터)와 데이터노드(슬레이브) 로 구현되어 있다.
네임노드(NameNode)는 다음과 같은 핵심기능을 수행한다.
n메타데이터 관리 : 파일 시스템을 유지하기 위한 메타데이터를 관리
n데이터노드 모니터링: 데이터노드는 네임노드에게 3초마다 하트비트(heartbeat)를 전송한다. 네임노드를 이를 이용하여 데이터노드의 실행상태와 용량을 체크한다. 하트비트를 전송하지 않는 데이터노드는 장애서버로 판단한다.
n블록관리 : 장애가 발생한 데이터노드의 블록을 새로운 데이터노드에 복제한다. 용량이 부족하다면 여유가 있는 데이터노드에 블록을 옮긴다.
n클라이언트 요청접수 : 클라이언트가 HDFS에 저장하는 파일을 로컬 디스크에 유지하다. 이때 파일은 두 가지로 저장되는데 하나는 실제 저장되는 로우데이터이고 다른 하나는 체크섬이나 파일 생성일자 같은 메타데이터가 저장된 파일이다.
3. 보조네임노드(Secondary Name Node)
네임노드가 메타데이터를 메모리에 담고 처리하는데 만약 서버가 리부팅되면 사라질 수 있다. HDFS는 이러한 점 때문에 editslog와 fsimage 라는 두 개의 파일을 생성한다. Editlog는 HDFS의 모든 변경이력을 저장하고, fsimage는 메모리에 저장된 메타데이터의 파일 시스템 이미지를 저장한 파일이다. 그런데 만약 editlog가 커지면 fsimage를 만드는데 시간이 많이 소요하게 된다. 이러한 문제를 해결하기 위해서 보조네임노드가 있다. 보조네임노드는 fsimage를 갱신해준다. 이러한 작업을 체크포인트라고 한다. 그래서 보조네임노드를 체크포인팅 서버라고도 한다. 보조 네임노드는 네임노드의 백업이 아니고 단순히 fsimage를 줄요주는 역할만 한다. Fsimage가 너무 커서 네임노드가 메모리에 로딩되지 못하는 경우를 예방하기 위해 사용되는 것이다.
4. 블록캐싱 ? 무슨말일까?
블록캐싱은 한마디로 메모리에 블록을 올린다는 의미로 받아들여진다. 즉. 이 말은 빈번하게 접근하는 블록파일의 경우 매번 읽기 위해 DISK I/O가 발생할 수 있다. 빠른 읽기 성능을 위해 빈번하게 이루어지는 블록에 대해서는 메모리(블록캐시)라는 데이터노드 메모리에 올려 성능을 높인다.
5. HDFS 페더레이션
이건 잘모르겠다.
6. HDFS 고가용성
데이터 손실을 방지하기 위해 네임노드 메타데이터를 다수의 파일시스템에 복제하는 방식과 보조 네임노드를 사용하여 체크 포인트를 생성하는 방식을 조합해서 활용할 수 있다.
결론은 모든 블록정보를 가지고있는 NameNode가 장애가 발생하면 전체 시스템에 영향을 줄 수 있다.
이 문제를 해결하기 위해 하둡 2.x 부터 HDFS 고가용성(High Availability)를 지원한다. 고가용성은 Active-Stanby 상태로 설정된 한 쌍의 네임노드로 구현된다. Active 네임노드가 장애가 발생하면 stanby 네임노드가 그 역할을 이어받아 큰 중단 없이 클라이언트의 요청을 처리한다.
v 네이놈노드는 edit 로그를 공유하기 위해 고가용성 공유 스토리지를 반드시 사용해야한다. 대기 네임노드가 활성화되면 먼저 기존 활성 네임노드의 상태를 동기화하기 위해 공유 edit 로그를 읽고, 이어서 활성 네이놈드에 새로 추가된 항목도 마저 읽는다.
v 데이터노드는 블록 리포트를 두 개의 네임노드에 보내야한다. 블록 매핑정보는 디스크가 아닌 네임노드의 메모리에 보관되기 때문이다.
v 클라이언트는 네임노드 장애를 사용자에게 투명한 방식으로 처리할 수 있도록 구성해야 한다.
v 대기네임노드는 보조네임노드의 역할을 포함하고 있으며, 활성 네임노드 네임스페이스의 체크포인트 작업을 주기적으로 수행한다.
고가용성 공유 스토리지를 위해 NFS 필러나 QJM(Quorum journal manager)중 하나를 선택할 수 있다.
QJM은 저널노드 그룹에서 동작하며, 각 에디트 로그는 전체 저널노드에 동시에 쓰여진다