일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 우선순위큐
- Apache Hadoop
- HDFS
- Data Engineering
- 도커
- leetcode
- 이진탐색
- 분산처리
- 파이썬
- 리트코드
- Hadoop
- 티스토리챌린지
- 알고리즘
- Python
- 아파치 스파크
- 빅데이터
- docker
- 오블완
- 프로그래머스
- 코딩테스트
- 아파치 하둡
- Spark
- 하둡
- heapq
- programmers
- 분산
- 딕셔너리
- Apache Spark
- 데이터 엔지니어링
- 스파크
- Today
- Total
래원
[Hadoop] HDFS란? 본문
이번 글에서는 Core Hadoop 모듈 중 하나인 HDFS (Hadoop Distributed File System)에 대해 소개하려고 한다.
이전 글과 이어지니 보고 오는 것을 추천한다.
What is HDFS (Hadoop Distribued File System)?
HDFS는 대용랑 파일 분산 시스템으로 저비용 하드웨어에 배포 및 실행되도록 설계되었으며, 내결함성이 매우 뛰어나다.
HDFS를 간단히 설명하면 다음과 같다.
한 개의 파일을 여러 블록으로 나누고 복제본을 생성해 분산된 서버에 저장하는 분산 파일 시스템
이제 좀 더 자세히 알아보자
HDFS 구성
HDFS는 기본적으로 마스터/슬레이브 아키텍처를 가지고 있으며, NameNode와 여러 DataNode로 이루어져 있다.
NameNode는 메타데이터를 가지고 있으며, 데이터는 블록 단위로 나누어 DataNode에 저장된다.
이 외에도 Secondary NameNode가 존재한다.
이제 각 노드에 대해 알아보자
NameNode
NameNode는 HDFS의 마스터 노드로 주요 역할은 메타데이터 관리와 DataNode 관리이다.
메타데이터는 파일 시스템의 구조 및 상태에 대한 정보를 담고 있으며 Fsimage와 Edits 파일로 관리된다.
- Fsimage 파일: 네임스페이스와 각 파일의 블록 정보를 포함하며, HDFS 상태를 저장
- Edits 파일: 파일의 생성, 삭제에 대한 트랜잭션 로그를 기록하며 주기적으로 업데이트
NameNode의 역할을 간략히 정리해보면 다음과 같다.
- 파일 시스템을 유지하기 위한 메타데이터를 관리
- 파일이름, 파일크기, 파일생성시간, 파일접근권한, 파일 소유자 및 그룹 소유자, 파일이 위치한 블록의 정보 등의 정보를 관리
- DataNode의 정상 작동 여부 관리
- Heartbeat 메시지를 통해 DataNode의 정상 작동 여부를 주기적으로 확인
- 클라이언트 요청 처리
- 클라이언트가 파일을 읽거나 쓸 때, 파일의 메타데이터를 제공하여 적절한 DataNode에 접근할 수 있게함
- 실제 데이터는 클라이언트와 DataNode간 직접 전송
Secondary NameNode
Secondary NameNode는 이름처럼 NameNode의 백업을 담당하는 것은 아니며 NameNode의 메타데이터를 주기적으로 병합하여 관리하는 역할을 한다.
이를 통해 NameNode의 부하를 줄이고, 장애 발생 시 복구에 필요한 최신 메타데이터를 제공한다.
Secondary NameNode의 역할을 간단히 정리하면 다음과 같다.
- 메타데이터 병합 작업
- NameNode의 메타데이터(Fsimage 파일, Edits 파일)를 주기적으로 병합하여 디스크에 저장
- 복구 지원
- NameNode 장애 발생 시 복구에 필요한 최신 메타데이터 제공하여 빠른 복구를 도움
DataNode
DataNode는 HDFS의 슬레이브 노드로, 파일의 블록 데이터를 물리적으로 저장한다.
이 때, 블록 데이터는 여러 DataNode에 복제되어 분산 저장되는데 이는 장애 발생 시 데이터 유실을 방지하고 내결함성을 제공한다.
예를 들어, 한 DataNode에 장애 발생 시 NameNode는 다른 DataNode의 복제본을 통해 데이터를 복구한다.
이를 위해 DataNode는 NameNode에 Heartbeat를 전송해 자신의 상태를 계속 보고한다.
블록 단위 파일 저장
HDFS는 파일을 일정 크기의 블록으로 분할하여 저장한다.
기본적으로 블록크기는 128MB로 설정되어 있지만, 이는 변경이 가능하다.
따라서, 파일이 128MB보다 크면 여러 블록으로 분할되어 저장되고, 각 블록은 DataNode에 분산 저장된다.
분할된 블록들은 여러 DataNode에 복제되어 저장되며, 기본적으로 3개의 복제본이 생성된다.
예를 들어, 위 그림과 같이 500MB 크기의 파일을 업로드할 경우 HDFS는 이를 128MB 크기의 블록 3개와 나머지 116MB 블록 1개로 분할하고 각 블록을 DataNode 1, 2, 3, 4에 분배하여 저장한다. 또한, 각 블록은 3개의 복제본을 가지며 복제본은 다른 DataNode에 저장된다.
블록 저장 방식의 장점
이러한 블록 저장 방식의 장점은 다음과 같다.
- 효율적인 데이터 접근
- 대용량 파일을 처리하는데 매우 효율적
- 각 블록은 독립적으로 저장되고 관리되므로 병렬 처리가 가능해 속도향상
- 내결함성
- 복제본을 통해 데이터 손실 방지
- 하나의 DataNode에 문제가 생겨도 다른 DataNode에서 정상적으로 접근 가능
- 확장성
- 데이터가 증가함에 따라 블록을 추가하는 방식으로 수평적 확장을 지원
마무리
이번 글에서는 HDFS (Hadoop Distributed File System)에 대해 알아보았다.
간단히 내용을 정리 해보면 HDFS는 NameNode, Secondary NameNode, DataNode로 구성되어 내결함성과 확장성을 제공한다. 또한, 데이터를 블록으로 나눠 분산 저장하고 복제본을 통해 데이터 손실을 방지한다.
이 때문에, HDFS는 빅데이터 환경에서 필수적인 기술로 자리 잡고 있는 것 같다...!
다음 글에서는 대용량의 데이터 처리를 위한 분산 프로그래밍 모델인 MapReduce에 대해 포스팅할 예정이다.
'Data Engineering > Hadoop' 카테고리의 다른 글
[Hadoop] Hadoop MapReduce를 이용한 Word Count 실습 (3) | 2024.12.03 |
---|---|
[Hadoop] Apache Hadoop 설치 (1) | 2024.12.03 |
[Hadoop] MapReduce와 YARN (0) | 2024.12.02 |
[Hadoop] Apache Hadoop 소개 (0) | 2024.11.24 |