티스토리 뷰
위 강의를 기반으로 추가 서칭하여 작성한 글입니다.
Why HDFS
기존의 데이터 저장방식
- 기존에는 단일 데이터베이스에 모든 데이터를 저장했습니다.
- 데이터가 매우 커지면서, 하나의 데이터베이스에 모든 데이터를 저장하는 것은 무리가 생겼어요.
- 이 때, 데이터의 분산 저장의 필요성이 생겨납니다.
- 분산 저장이란 엄청나게 많은 데이터를 여러 데이터베이스에 저장한다는 뜻이에요.
What is HDFS
하둡 분산 파일 시스템(Hadoop Distribute File System)은 commodity hardware (특별한 기능이 없는 보통의 컴퓨터들. 우리가 사용하는 랩탑과 데스크탑이라고 생각하면 됩니다.) 에 엄청난 양의 데이터셋을 저장할 수 있는 파일 시스템입니다.
HDFS에는 두 개의 코어 컴포넌트 NameNode, DataNodes 가 있습니다.
NameNode
- master로서, DataNodes을 관리합니다.
- 메타데이터를 저장합니다.
- 데이터에 대한 정보를 설명하는 데이터
- 디렉터리의 계층 구조, 권한 정보, 블록 할당 정보 등
- 하나의 전체 파일에 대해 활성화된 NameNode는 단 하나입니다.
DataNodes
- slave로서, NameNode에 의해 통제됩니다.
- 실제 데이터들을 저장합니다.
- 하나의 전체 파일에 대해 여러 개의 DataNodes가 존재할 수 있습니다.
NameNode의 메타데이터
NameNode의 메타데이터는 두 개의 파일로 이루어져있습니다.
두 파일 모두 HDFS 상의 changes를 기록합니다.
editlog
- HDFS의 최근 변화만을 기록합니다.
fsimage
- HDFS의 모든 변화를 기록합니다.
Secondary NameNode
HDFS에서는 Secondary NameNode에 editlog와 fsimage의 복사본을 따로 저장합니다.
대개 Secondary NameNode는 NameNode와 별개의 랙에 저장되는데요.
즉, 두 노드는 물리적으로 다른 곳에 위치합니다.
예를 들어, NameNode가 저장된 컴퓨터에 고장이 났습니다!
이 때, 다른 랙에 있는 Secondary NameNode가 돌아가게 되며 HDFS가 정상 작동하게 됩니다.
Secondary NameNode에는 fsimage의 체크포인트가 저장됩니다.
이 체크포인트로 NameNode의 fsimage를 업데이트 합니다.
editlog와 fsimage에 대해서는 추후에 더 알아보죠!
우선 여기서는
- NameNode에는 데이터에 대한 정보가 저장되며,
- Secondary NameNode는 NameNode의 체크포인트 생성을 지원하여, 메타데이터의 백업을 생성하고 NameNode의 복구 작업을 돕는다.
는 것을 이해하도록 합니다.
HDFS Cluster Architecture
- 하나의 NameNode가 존재한다.
- NameNode에는 fsimage와 editlog가 존재한다.
- 하나의 랙에 여러 개의 DataNode가 존재한다.
- NameNode와 각 랙들은 Core Switch로 연결된다.
HDFS Data Blocks
HDFS는 거대한 데이터를 작은 덩어리로 나누어 저장합니다.
우리는 이 덩어리를 데이터 블록 이라 합니다.
한 데이터 노드에 여러 개의 데이터 블록이 저장되는 거에요.
- 데이터 블록의 사이즈는 기본적으로 128MB입니다.
- 대부분 이 사이즈 그대로 사용합니다.
- 가장 마지막 블록을 제외한 모든 데이터 블록의 사이즈는 128MB로 동일해야합니다.
- 마지막 블록은 128MB 이하입니다.
자, 예를 들어 520MB의 텍스트 파일을 HDFS에 저장한다고 봅시다.
이 텍스트 데이터를 총 네 개의 블록에 128MB로 나누어 저장하고, 마지막 블록에는 남은 8MB를 저장합니다.
DataNode Replication
그런데 , 큰 데이터를 단순히 작은 단위로 나누어 저장하는 것이 의미가 있을까요?
HDFS가 유용한 이유는 바로 Replication (복제) 입니다.
HDFS에서는 한 데이터 블록을 여러 데이터 노드에 저장함으로써 데이터 유실을 방지합니다.
아래 그림같은 상황에서 Node 5가 고장이 난다면, Block B/D/E를 잃어버리게 될까요?
다행히, 세 블록 모두 정상적으로 작동하는 다른 노드에서 찾을 수 있습니다.
기본 replication factor는 3으로, 하나의 데이터 블록이 총 3개씩 존재하게 됩니다.
Rack Awareness
- 서로 다른 랙 간에 데이터를 분산하여 저장한다는 개념
모든 복제본이 하나의 랙에만 저장되지 않으면 됩니다.
복제 비용, 물리적인 네트워크 전송 비용과 시간을 고려하여 데이터 블록을 분산하여 저장합니다.
HDFS Architecture
두 개의 랙에 DataNodes가 저장되어 있습니다.
DataNode 안에 있는 것은 DataBlocks겠죠?
하나의 블록이 여러 노드에 저장된 것도 확인할 수 있습니다.
각 DataNode는 NameNode에 HeartBeat 이라는 시그널로 자신의 상태를 알립니다.
HDFS READ Mechanism
Client가 HDFS의 데이터를 READ하는 과정을 살펴봅시다.
- HDFS 클라이언트 객체 생성
- Hadoop의 클라이언트 라이브러리 (Hadoop HDFS API, Apache Hadoop HDFS Client 등) 사용
- 존재하는 HDFS Open
- 클라이언트 애플리케이션의 요청
- RPC를 사용하여 NameNode에 데이터 읽기 요청을 보냅니다.
- Remote Procedure Call : 로컬 프로시저를 호출하는 것처럼 원격 서버의 프로시저를 호출하는 것
- Access 권한 확인
- NameNode는 요청한 클라이언트가 권한이 있는지 확인합니다.
- 권한이 있다면, DataNode 엑세스 토큰, 해당 데이터가 있는 블록의 위치와 IP 주소를 응답합니다.
- 이 때, 복제된 데이터 블록의 모든 주소를 응답함.
- 해당 데이터블록을 저장하고 있는 DataNode에 읽기 요청
- 복제된 데이터 블록 중 가장 가까운 블록에 접근함.
- FSData InputStream 객체를 통해 토큰과 함께 읽기 요청을 보냅니다.
- DataNode가 해당 블록의 데이터를 클라이언트에 전송합니다.
- 해당 데이터 블록의 끝까지 데이터를 읽으면 통신이 종료됩니다
'기본 다지기 > BigData' 카테고리의 다른 글
Airflow 10문 10답 (1) | 2024.11.09 |
---|---|
Hadoop 10문 10답 - 기본편 (1) | 2024.11.08 |
[SQL 스터디] 데이터 엔지니어링이란 (2) | 2024.08.14 |
[빅데이터] 빅데이터 처리의 기본 (1) | 2023.11.21 |
[Kafka] 카프카의 기본 개념 (4) | 2023.08.31 |
- Total
- Today
- Yesterday
- 우분투
- 바이너리 조건
- 스택
- 리눅스
- json필드
- sql대소문자
- 백준
- 백준 3020
- MySQL
- 오블완
- sql 데이터타입 변경
- docker
- hdfs
- 완전탐색
- mysql binary
- 파이썬
- Linux
- stream=true
- django
- 빅데이터
- SSAFY
- 싸피
- 프로그래머스
- 티스토리챌린지
- re라이브러리
- 백트래킹
- SQL
- 하둡
- 정규표현식
- ubuntu
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |