HDFS란?
하둡 분산 파일 시스템 (Hadoop Distributed File System)으로써 대용량 데이터 사용 및 관리를 효율적으로 하기 위해 설계한 파일 시스템.
이번 글부터는 Hadoop Component들을 하나씩 소개해드릴 예정입니다. 하둡이라는 것이 이미 10년 전부터 유행해 인기가 있었지만 최근 AI 및 딥러닝이 발전함과 동시에 빅데이터라는 분야가 동시에 핫해졌습니다. 빅데이터도 분야가 크게 두 가지로 데이터 엔지니어링, 데이터 분석으로 나눠집니다. 이 중에서 하둡이 메인으로써 사용되는 것이 빅데이터 엔지니어링입니다.
하둡 생태계에서 가장 기본인 HDFS 부터 소개하겠습니다. HDFS 는 하둡 분산 파일 시스템으로써 대용량 데이터 사용 및 관리를 하기 위해 설계한 파일 시스템입니다. 여기서 다수의 컴퓨터를 묶어 마치 컴퓨터처럼 사용되는 클러스터라는 개념이 나옵니다. 그리고 클러스터를 구성하는 하나하나의 서버를 노드라고 부릅니다.
이번 글은 HDFS 논문을 베이스로 적는 정보이므로 현재의 HDFS 3세대와는 조금의 차이가 있을 수 있다는 점 참고 바랍니다.
HDFS 특징
옛날에는 아주 고사양의 컴퓨터 한 대에 많은 데이터를 저장했고 연산량이 큰 작업들을 수행했습니다. 하지만 데이터 양이 커짐에 따른 하드웨어 성능 향상에 필요한 비용을 기하급수적으로 커져갔습니다. 그래서 구글에서 HDFS 의 시초인 GFS(Google File System)라는 저사양의 컴퓨터들을 많이 모아 마치 한대의 컴퓨터처럼 동작하는 모델을 설계했고 이후에 HDFS 모델이 설계되었습니다.
많은 컴퓨터들을 사용하기 때문에 서버의 문제가 발생하는 빈도수도 늘어났습니다. 그렇다면 문제가 발생한 서버에 존재하던 데이터들은 어떻게 될까요? 이러한 취약점을 보완하기 위해 데이터를 담고 있는 block의 복제 데이터인 replica들을 여러 개 만들어 다른 서버에 저장합니다. 그래서 어느 한 서버가 문제가 생기더라도 복제 데이터를 다른 서버로부터 사용할 수 있기 때문에 사용자 입장에서는 문제없이 이용할 수 있습니다.
HDFS 의 특징으로 저장된 파일은 데이터 무결성으로 인해 수정이 불가능합니다. 빅데이터라는 것은 상당히 방대한 양의 데이터를 다루기 때문에 대용량 파일 하나의 내용을 바꾸는데 큰 비용을 필요로 합니다. 그렇기 때문에 HDFS 모델 자체를 한번 쓰고 여러 번 읽는 목적으로 설계했습니다. 하지만 이후의 최신 HDFS 버전에서는 기존 파일에 append를 할 수 있는 기능이 도입되긴 했습니다.
HDFS 구성
HDFS는 크게 NameNode 와 DataNode로 구성됩니다.
NameNode
NameNode 는 HDFS에 저장되는 데이터들의 위치, 권한 등 다양한 정보들을 inode에 저장합니다. 그래서 모든 데이터들의 meta data 정보를 가지고 있기 때문에 사용자는 HDFS에 있는 파일을 읽거나 새로 쓸 때 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) 고가용성을 뜻하는 단어로써 "절대 고장나지 않음" 즉, 시스템이 어떤 문제가 발생하더라도 정상 작동하는 성질을 말한다. |
DataNode
HDFS에 저장되는 데이터들은 Block이라는 단위로 쪼개져서 모두 서로 다른 DataNode에 저장됩니다. 이때 Block들은 128MB의 크기를 가지고 사용자에 따라 다른 크기로 설정할 수 있습니다. 그리고 이렇게 나누어진 Block들은 복사본들을 추가로 만들어 각각 다른 DataNode에 저장합니다. 아래의 그림을 참고하시면 쉽게 이해하실 수 있습니다.
DataNode는 NameNode와 지속적인 heartbeat를 보내면서 DataNode의 용량, 사용 비율, 현재 사용되고 있는 데이터 양 등 여러 가지 정보들을 제공하고, NameNode는 이러한 정보들을 지속적으로 받으면서 모든 DataNode의 상황을 모니터링합니다. 만약 NameNode가 특정 DataNode의 heartbeat를 10분 동안 받지 못한다면 해당 DataNode는 서비스가 중단된 것으로 인식하고 담겨있던 데이터들을 새로 생성 후 다른 DataNode에 저장합니다.
HDFS의 File Read/Write 과정
HDFS는 다른 파일 시스템과 같이 파일 read, write, delete와 디렉토리 생성, 삭제 기능을 제공합니다. 그래서 사용자 입장에서는 굳이 파일 시스템의 meta 데이터와 storage, 그리고 block이 replica를 가진다는 것을 알 필요가 없습니다.
Read
HDFS의 파일을 read 할 때는 아래와 같은 과정이 수행됩니다.
1. Client가 NameNode에게 파일의 위치를 요청.
2. 데이터의 meta 데이터를 가지고 있는 NameNode는 Client에게 DataNode의 위치를 반환.
3. DataNode의 위치를 받은 Client는 DataNode에 직접 read.
Write
HDFS의 파일을 write할 때는 아래와 같은 과정이 수행됩니다.
1. Client가 NameNode에게 파일의 block 및 replica를 저장할 DataNode의 위치를 요청.
2. NameNode는 네트워크 거리를 최소로 하는 DataNode 리스트를 Client에게 반환.
3. Client가 block에 데이터를 write 하면 DataNode 리스트가 pipeline을 형성하며 순차적으로 replica에 write 됨.
지금까지 HDFS의 특징, 구성 및 read/write 동작 과정에 대해서 알아봤습니다. 다음 글에서는 HDFS데이터를 효율적으로 처리하기 위한 MapReduce에 대해서 알아보도록 하겠습니다.
'Hadoop Ecosystem > Hadoop' 카테고리의 다른 글
[HDFS] JMX Metrics 값 불러오기 (0) | 2023.04.02 |
---|---|
[Hadoop] YARN Capacity scheduler 특징 및 Queue 옵션 (0) | 2022.04.22 |
[Hadoop] HDFS NameNode의 Metadata 관리와 Failover 상세 과정 (0) | 2022.02.15 |
[Hadoop] YARN - Yet Another Resource Negotiator (0) | 2021.06.12 |
[Hadoop] MapReduce - Simplified Data Processing on Large Clusters (0) | 2021.03.25 |