이야기박스
Hadoop 시리즈. HDFS 맛보기 본문
하둡 분산형 파일 시스템 (HDFS; Hadoop Distributed File System)
HDFS는 대용량 파일을 저장하고 처리하기 위해서 개발된 소프트웨어입니다. 이는 하나의 서버에서만 동작하는 것이 아니라, 다수의 서버에서 클러스터링 되어 운영됩니다.
하둡 클러스터의 기본적인 이해
하둡 클러스터는 Master Node, Slave Node 크게 두 가지로 나누어 볼 수 있습니다.
# 마스터 노드(Master Node)
- 잡 트랙커가 맵리듀스를 사용하여 병렬 처리
- 네임 노드는 하둡 분산 파일 시스템의 데이터 저장 기능 관리
- 세컨더리 네임 노드는 네임 노드 백업 용도
# 슬레이브 노드 (Slave/Worker Node)
- 태스크 트랙커 - 잡 트랙커의 슬레이브
- 데이터 노드 - 네임 노드의 슬레이브
HDFS의 주요 특징
- 블록 단위 관리
- 블록의 복제
- 데이터의 수정은 불가능, 읽기만 지원하여 무결성 제공. 단 파일의 삭제/복사/이동은 가능
- 스트림으로 동작
HDFS Architecture
하둡 파일 시스템은 블록 단위로 읽기/쓰기를 수행합니다. 하나의 특정 파일도 여러 개의 블록으로 나뉘어 각 워커 노드에 저장되게 되고 이때 블록 사이즈의 기본값은 64MB입니다. 이 설정은 Hadoop configuration 조작을 통해 변경이 가능합니다.
# 네임 노드 (Namenode)
Primary Namenode라고도 불립니다. 주로 하둡의 메타데이터와 네임스페이스, 데이터 노드의 관리를 하고 있습니다. 메타 데이터는 네임스페이스와 블록 정보를 담고 있는 Fsimage, 파일의 생성/삭제의 정보를 담고 있는 Edits 두 개의 파일로 구성됩니다.
# 세컨더리 네임 노드 (Secondary Namenode)
네임 노드가 구동되면, 파일의 생성/삭제 정보를 메모리에 담고 있다가 주기적으로 Edits 파일을 생성하게 됩니다. 세컨더리 네임 노드는 Edits, Fsimage의 파일이 너무 커지지 않도록 주기적으로 병합해주는 작업을 해줍니다.
# 데이터 노드 (Datanode)
네임 노드에서 내려오는 명령을 수행하는 역할을 합니다. (crud...)
위에서는 대략적인 HDFS의 구조를 보았으니, 아래에서 조금 더 들어가서 HDFS의 동작을 살펴보도록 하겠습니다.
File Read
우선 클라이언트가 네임 노드에게 파일의 블록이 저장된 위치를 요청합니다. 네임노드가 클라이언트에게 블록 위치를 알려주면, 각 데이터노드에 있는 블록을 읽어오게 됩니다. 만약 노드의 블록이 깨져 있다면, 네임노드에게 이를 전달하고 다른 블록을 참조하게 됩니다.
File Write
네임노드에게 파일 정보를 알려주고, 블록을 쓸 수 있는 노드 목록을 요청합니다. 이후, 반환받은 노드 목록에 파일을 저장하게 됩니다. 그리고 이때 데이터 노드 간의 블록 복제가 동시에 진행됩니다.
Data Replication
파일이 여러 개의 블록으로 나뉘면, HDFS는 사전에 지정된 개수(dfs.replication) 옵션만큼 같은 클러스터 내 여러 노드에 복제합니다.
만약 작업 노드의 블록에서 문제가 발생하더라도 다른 노드에서 동일한 블록을 이용할 수 있으니 가용성이 매우 높아집니다.
dfs.replication 값은 hdfs-site.xml 에서 설정할 수 있으며 기본값은 3으로 지정되어 있습니다.
HDFS의 데이터 노드 지정 방식
위에서 하나의 파일을 여러 블록으로 나누어 저장하고 또 이들을 서로 다른 데이터 노드에 복제한다고 하였습니다. 그렇다면 어떠한 방식으로 이들이 서로 다른 데이터노드에 분산되어 저장이 될까요?
우선 랙(Rack)이라는 개념을 먼저 알 필요가 있을 것 같습니다.
랙이란 컴퓨터를 쌓아 둘 수 있는 캐비닛과 같은 개념으로 이해하시면 될 것 같습니다.
위와 같은 랙에 여러 컴퓨터를 쌓아두고 이들이 하둡에서 각 노드의 역할을 하게 되고 하둡은 이러한 랙을 여러 개 보유하고 각 랙마다 번호를 부여하여 관리하고 있습니다.
# Rack Awareness
Rack awareness(랙 인식)은 하둡에서 랙을 관리하는 개념입니다. 데이터 블록이 같은 랙에 있으면 네트워크 성능면에서 큰 이점을 볼 수 있지만 랙에 장애가 발생한 경우, 데이터가 손실될 수 있는 위험이 존재합니다. 반대로 모든 데이터 블록이 다른 랙에 있다면 서비스 장애에는 내성을 지닐 수 있겠지만, 네트워크 성능을 포기해야 합니다.
클라이언트가 하둡에 파일 저장을 요청하게 되면, 네임 노드는 바로 위의 Rack Awareness를 통하여 적절한 데이터 노드 목록을 추리고 전달하게 됩니다.
Nameservice
HDFS의 고가용성을 위한 기술입니다. HDFS는 네임 노드에 장애가 발생하면 모든 서비스가 중단되게 됩니다. 세컨더리 네임노드는 프라이머리 네임노드의 HA 구성이 아니기 때문에, 별도의 네임노드 구성을 구성하여 Active/Standby 두 개로 구분하여 관리합니다. Active/Standby 네임노드 모두 데이터 노드로부터 블록 리포트, 하트비트를 받고 동일한 메타데이터, 에디트 파일을 관리하게 됩니다.
주의할 점은, Nameservice를 통하여 Active/Standby 네임 노드를 구성하게 되면 Standby 네임노드에서 세컨더리 네임노드의 역할을 대신하게 되고 이때 세컨더리 네임노드를 실행하게 되면 에러가 발생하게 됩니다.
후기
첫 술에 배부를 수 없다고 처음부터 HDFS를 모두 이해하는 건 어려울 것 같습니다. 이번에는 여기까지만 HDFS에 대해 알아보고 다음에 다시 한번 더 깊게 들어가 볼 수 있도록 하겠습니다.
참고
공식 문서
기타 사이트
하둡 분산 파일 시스템(HDFS, Hadoop Distributed File System) [1편]
하둡 분산 파일 시스템(HDFS, Hadoop Distributed File System) [2편]
'Computer & Data > Big Data' 카테고리의 다른 글
Hadoop 시리즈. Hadoop3 설치하기 - 기본 설치 (0) | 2021.09.22 |
---|---|
Hadoop 시리즈. Zookeeper 설치 (0) | 2021.04.23 |
Hadoop 시리즈. Hadoop Ecosystem (0) | 2020.11.20 |
Chapter 4. Fundamentally lazy (0) | 2020.11.12 |
Chapter 3. The majestic role of the dataframe (0) | 2020.10.22 |