본문 바로가기

카테고리 없음

[DE] HDFS - The Hadoop Distributed File System

728x90
반응형

디지털 기술의 발전, 사물인터넷(IoT) 기술, 개인 디지털 기기의 확산 등 다양한 요인으로 데이터는 급격하게 증가하고 있다. 유튜브, 페이스북과 같은 플랫폼에서는 개인이 콘텐츠를 폭발적으로 생성하고, 스마트기기와 신용카드 거래, CCTV 등을 통해서도 매일 같이 엄청난 양의 데이터가 쌓여가고 있다.

 

KT 경제경영연구소의 통계에 따르면, 인류가 종이에 기록을 남기기 시작한 이후 2000년대 초까지 생성된 데이터는 약 20 엑사바이트(exa byte)로 추정된다. 그러나 2000년대 초부터 2021년까지 생성된 데이터의 양은 약 50 제타바이트(zetta byte), 즉 5만 엑사바이트에 해당한다. 이는 지난 5,000년 동안 생성된 데이터의 양을 약 2,500배 넘어서는 것이다.


가장 놀라운 사실은 현재 인류가 가진 데이터의 약 90%가 지난 10년 동안 생성되었다는 것이다. 이런 상황에서 데이터를 효율적으로 관리하고 처리하기 위해 분산 시스템의 중요성이 점점 더 커지고 있다.

 

2015년 ~ 2025년 데이터 증가 예상치 / 출처:IDC. 2018


1. 자원 확장의 두 가지 방법

데이터의 양이 급증함에 따라 이를 처리하기 위한 방법은 크게 두 가지로 나뉜다.

 

(1) 수직적 확장(Vertical Scaling)

- 기존 서버의 CPU, RAM, 저장 공간을 늘리는 방법. 비용이 매우 비싸고, 물리적 한계가 있다.

 

(2) 수평적 확장(Horizontal Scaling)

- 저렴한 서버를 여러 대 추가하여 하나의 서버처럼 작동하게 하는 방법. 비용 효율적이며, 확장성이 좋다.

 

https://www.educative.io/blog/distributed-systems-considerations-tradeoffs

 


이 두 가지 방법을 간단하게 요약하자면, 수직적 확장은 '더 강력한 하나의 서버'를 만드는 것이고, 수평적 확장은 '여러 대의 서버를 하나처럼' 사용하는 것입니다.

예시: E-commerce 웹사이트

예를 들어, E-commerce 웹사이트가 있을 때 일반적인 기간에는 트래픽이 적어 단일 서버에서 충분히 운영이 가능하다. 그러나 Black Friday나 특정 행사 기간 동안에는 웹사이트의 트래픽이 급증하기 때문에 이런 시기에 수직적 확장을 이용한다면, 서버의 CPU나 RAM, 저장 공간을 늘려야 하므로 비용이 크게 증가한다.

수직적 확장의 한계
수직적 확장(Vertical Scaling)은 단일 서버의 자원을 늘리는 방법이다. 그러나 이 방법에는 물리적 한계가 있다. 예를 들어, CPU의 클럭 속도는 어느 정도를 넘으면 더 이상 높일 수 없다. 또한, 수직적 확장은 서버를 꺼야만 하드웨어를 업그레이드할 수 있으므로, 서비스 중단 시간이 발생할 수 있다. 이는 E-commerce 웹사이트에서는 매출 손실을 가져올 수 있다.

수평적 확장의 필요성
이런 문제를 해결하기 위해 수평적 확장(Horizontal Scaling)이 이상적인 방법이다. 수평적 확장은 기존 서버와 동일하거나 비슷한 능력을 가진 새로운 서버를 추가하는 것이다. 이를 통해 시스템은 여러 서버에 로드를 분산시켜 트래픽을 더 효과적으로 처리할 수 있다.

분산 시스템의 역할
분산 시스템은 이러한 수평적 확장을 가능하게 해주며, 각 서버는 특정 부분만 담당하므로 성능이 향상된다. 더 나아가, 분산 시스템은 일부 서버에 문제가 생겼을 때도 다른 서버가 그 기능을 대체할 수 있으므로 높은 가용성을 보장한다.

 

2. 분산 시스템의 대표적인 플랫폼: HDFS

이처럼 분산 시스템의 중요성이 갈수록 높아지고 있는데, 이러한 분산 시스템의 대표적인 플랫폼 중 하나가 바로 HDFS (Hadoop Distributed File System)이다. HDFS는 대용량 데이터를 효율적으로 저장하고 처리할 수 있는 오픈소스 분산 파일 시스템이다.

HDFS는 데이터를 여러 노드에 분산하여 저장함으로써, 단일 서버의 저장 용량 한계와 가용성 문제를 해결한다. 이를 통해 E-commerce 웹사이트와 같은 트래픽이 높은 서비스에서도 높은 성능과 안정성을 유지할 수 있다.

HDFS는 또한 고가용성과 데이터 복제 기능을 제공하여, 서버 하나가 다운되더라도 데이터의 손실 없이 운영이 가능하다. 따라서 HDFS는 분산 시스템을 이용하는 많은 기업과 개발자에게 선택받고 있으며, 이를 통해 더욱 빠르고 안정적인 데이터 처리가 가능해지고 있다.

 

2-1. HDFS의 역사

 HDFS는 2005년에 Doug Cutting과 Mike Cafarella에 의해 개발되었으며, Google의 GFS(Google File System) 논문에서 큰 영감을 받았으며, 이는 HDFS의 설계에 중요한 역할을 했다고 한다.

Doug Cutting

2-2. HDFS 주요 특징

(1) 블록 단위 파일 보관

 - 파일을 블록 단위로 나눠서 보관(기본설정 : 64MB)

(2) 분산 파일 시스템

 - 블록을 다중 노드에 분산해서 보관

(3) 리플리케이션

 - 하나의 블록은 여러 노드에 복제

 - 특정 노드 장애에 무정지 대응

(4) 범용 장비 사용

 

2-3. HDFS의 구성

HDFS는 크게  NameNode 와  DataNode 구성된다.

 

(1) NameNode (Master 서버)

 - HDFS의 '브레인' 라고 말할 수 있다.

 - 이는 파일시스템의 메타데이터를 관리하며, 클라이언트 요청에 따라 파일을 어디에 저장할지, 어떻게 읽을지 결정한다.

메타데이터
파일의 이름, 퍼미션(권한), 디렉토리 구조 등을 메모리에 저장한다. 실제 데이터는 DataNode에 저장되기 때문에 NameNode에서는 이러한 정보를 가지고 어떤 DataNode에 접근할 것인지 결정한다.

 

HDFS가 처음에 설계되었을 당시에는 하나의 cluster 당 수많은 DataNode가 있는 반면에 NameNode는 오직 1개뿐이었습니다. 그래서 1세대 HDFS는 SPOF(Single Point Of Failure)라는 문제점이 있었고 Fail Over를 위한 다양한 방법을 통해 2세대부터 HA(High Availability)를 보장하게 되었습니다.

SPOF (Single Point Of Failure)
 단일 장애점을 뜻하는 단어로써 어느 한 요소에 문제가 발생했을 때 시스템 전체가 작동할 수 없는 구조를 말한다.

Fail Over
 시스템 대체 작동을 뜻하는 단어로써 시스템에 문제가 발생했을 때 예비 시스템으로 대체하는 기능을 말한다.

HA (High Availability)
 고가용성을 뜻하는 단어로써 "절대 고장나지 않음" 즉, 시스템이 어떤 문제가 발생하더라도 정상 작동하는 성질을 말한다.

 

(2) DataNode (Slave 서버)

 - 실제 파일 데이터를 저장하는 노드

 - NameNode의 지시에 따라 데이터를 저장하거나 읽어 클라이언트에 전달

 - 데이터 블록 : HDFS에서는 큰 파일을 작은 블록 단위로 나눠서 저장한다. 이러한 블록들은 여러 DataNode에 분산되어 자장된다.

 - 레플리케이션 : 안정성을 위해 각 데이터 블록은 여러 DataNode에 복제 된다. 이로 인해 일부 DataNode가 Fail 되더라도 데이터 손실을 방지할 수 있다.

https://taaewoo.tistory.com/entry/Hadoop-HDFSHadoop-Distributed-File-System

DataNode는 NameNode와 지속적인 heartbeat를 보내면서 DataNode의 용량, 사용 비율, 현재 사용되고 있는 데이터 양 등 여러 가지 정보들을 제공하고, NameNode는 이러한 정보들을 지속적으로 받으면서 모든 DataNode의 상황을 모니터링합니다. 만약 NameNode가 특정 DataNode의 heartbeat를 10분 동안 받지 못한다면 해당 DataNode는 서비스가 중단된 것으로 인식하고 담겨있던 데이터들을 새로 생성 후 다른 DataNode에 저장합니다.

 

2-4. 작동원리

(1) 파일 읽기

1) Client가 NameNode에게 파일의 위치를 요청.

2) 데이터의 meta data를 가지고 있는 NameNode는 Client에게 DataNode의 위치를 반환.

3) DataNode의 위치를 받은 Client는 DataNode에 직접 read.

https://www.slideshare.net/madvirus/hdfs-28871456

(2) 파일 쓰기

1) Client가 NameNode에게 파일의 block 및 replica를 저장할 DataNode의 위치를 요청.

2) NameNode는 네트워크 거리를 최소로 하는 DataNode 리스트를 Client에게 반환.

3) Client가 block에 데이터를 write 하면 DataNode 리스트가 pipeline을 형성하며 순차적으로 replica에 write 됨.

 

 

 

참고

(1) https://www.donga.com/news/It/article/all/20220824/115122895/1

(2) https://www.educative.io/blog/distributed-systems-considerations-tradeoffs

(3) https://www.slideshare.net/madvirus/hdfs-28871456

(4) https://taaewoo.tistory.com/15

(5) https://developer-woong.tistory.com/8

(6) https://taaewoo.tistory.com/entry/Hadoop-HDFSHadoop-Distributed-File-System

 

728x90
반응형