데이터로그😎

[Hadoop] HDFS(Hadoop Distributed File System) 본문

Data Engineering

[Hadoop] HDFS(Hadoop Distributed File System)

지연v'_'v 2024. 1. 22. 17:50

🗂️ 분산 파일 시스템 (DFS - Distributed File System)

DFS (Distributed File System)

DFS란?

빅데이터는 여러 클러스터(컴퓨터)에 걸쳐 데이터를 분산하고, 각 클러스터(노드)의 컴퓨팅 파워를 사용하여 정보를 처리하는 것이다. DFS은 네트워크에 연결된 여러 머신의 스토리지를 관리하는 파일 시스템이다.

  • 종류: HDFS, GFS, Ceph 등

 

DFS 작동방식

  • Distribution: 전체 데이터를 나눈 블록을 여러 노드에 분산 시킨다. 각 노드는 고유의 컴퓨팅 능력이 있기 때문에, DFS는 데이터 블록을 병렬 처리할 수 있다.
    DFS의 distribution of data (출처: mindtory.com)

 

  • Replication: DFS는 서로 다른 클러스터에 데이터 블록의 복사본을 만들어 놓는다. 이로 인해, 내결함성높은 동시성을 갖는다. 아래의 사진을 예로 들어 Rack #1이 고장났다고 가정해보자. 만약 Rack #1에만 1,2,3,4 파일블록이 저장되어 있다면 Rack #1의 고장으로 1,2,3,4 파일블록이 유실 되었기 때문에 전체 File의 복구가 어렵다. 그러나 DFS에서는 1,2,3,4 파일블록이 Rack #2, #3, #4에 분산되어 저장되었기 때문에 Rack #1이 고장 났더라도 File의 복구가 가능하다.
    DFS- Replication of Data block (출처: mindtory.com)

DFS 장점

  • Scalability(확장성) : rack이나 cluster를 system에 더하여 구조를 확장 가능하다.
  • Fault Tolerance(내결함성): Cluster, Rack이 고장났거나 Rack이 network로부터 연결이 끊긴 경우에도 큰 문제가 발생하지 않는다.
  • High Concurrency(높은 동시성): 여러 클라이언트의 요청을 동시에, 각 노드에서 처리 가능하다.

 

DFS 문제점

  • 네트워크 기반이다 보니 네트워크 상 문제가 발생할 수 있다.
  • 여러 머신들 중 하나의 머신에 장애가 발생할 수 있다.
  • 따라서 DFS는 하나의 머신에서 장애가 발생하더라도 데이터가 유실되지 않도록 견고한 파일 시스템을 유지해야 한다.

출처: https://www.mindtory.com/an-introduction-to-distributed-file-system/

 

GFS (Google File System)

  • 2003년에 구글에서 발표한 분산 파일 시스템
  • HDFS의 모태가 되는 구조
  • 특징: Master / Worker 구조를 제안
  • GFS Master (Master 역할), Chunk Server (Worker 역할)

 

 

🐘 HDFS (Hadoop Distributed File System)

Hadoop (하둡)

하둡은 대규모 데이터 세트를 분산 처리하기 위한 오픈소스 프레임 워크이다. 대용량 데이터를 다수의 머신에 분산하여 처리하고 저장할 수 있는 기능을 제공한다.

 

구성요소

  • HDFS (Hadoop Distributed File System): 데이터를 저장하고 분산 처리하는 파일 시스템.
  • MapReduce: 분산 데이터 처리를 위한 프로그래밍 모델 및 프레임워크.
  • YARN (Yet Another Resource Negotiator): 클러스터 자원 관리 및 작업 스케줄링을 담당하는 컴퓨팅 클러스터 관리 시스템.

 

하둡 클러스터

  • 클러스터란 여러 대의 컴퓨터들이 연결되어 하나의 시스템처럼 동작하는 컴퓨터들의 집합
  • 하둡 클러스터란 단일 서버로 운용되는 것이 아니라, 여러 개의 서버를 하나로 묶어서 클러스터를 구성
  • 대용량 데이터를 처리하기 위한 분산 처리 시스템으로 사용됨.
  • 하둡은 클러스터 상에서 동작하며, 데이터를 여러 개의 노드에 분산하여 저장하고 처리한다.
  • 데이터의 안정성, 가용성 보장. 빠른 처리 가능.

 

HDFS (Hadoop Distributed File System)

  • 범용 하드웨어를 사용하여 분산 파일 시스템 구성
  • 클러스터 내에 분산 파일 시스템을 구성하는데, 비싼 서버 대신 일반적인 범용 컴퓨터로도 저렴한 가격에 분산 파일 시스템을 구성할 수 있습니다.
  • 블록 단위 저장
  • 마스터 / 워커 구조
  • 장애 허용 시스템(Fault Tolerance, 내고장성) 제공
    • 데이터 복제(Replication)을 제공하여 네트워크나 워커에 장애가 발생하더라도 계속해서 서비스를 제공할 수 있습니다.
  • 확장성 제공
    • 하드웨어를 추가하면 용량이 선형적으로 그대로 증가하는 선형적인 확장성을 제공합니다.

 

HDFS Block : 파일 저장 단위

  • Block이란 HDFS에서 파일을 저장하는 단위이다.
  • HDFS는 블록을 이용해 하나의 거대한 파일을 여러 개의 블록으로 저장한다.
  • 블록 사이즈는 128MB이며, 일반적인 분산 시스템보다 훨씬 크다. 실무에서는 128MB보다 더 큰 블록 사이즈를 갖는 경우도 있다.
  • 예를 들어 블록 사이즈가 128MB라면, 374MB 는 128MB, 128MB, 118MB 세개의 블록으로 나뉜다.

HDFS Block

 

Master / Worker 아키텍처

Hadoop Master/Worker

하둡의 아키텍처는 MasterWorker로 구성되어 있다.

아키텍처 기능
Master - 관리자의 역할로서 명령만을 내린다.
- Worker node들에 대한 메타 데이터를 갖고 있다.
- 클라이언트로부터 작업 요청을 받으면, 메타 데이터를 토대로 원하는 데이터를 가지고 있는 Worker node에게 작업을 명령한다.
Worker - 데이터에 대한 처리 작업을 실제로 수행한다.

 

 

HDFS 구조

HDFS Architecture (출처: https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html)

 

Namenode

메타데이터 관리, 데이터 노드 관리

  1. 메타데이터 관리
    • 네임노드의 메타데이터:  어떤 데이터노드에 어떤 블록이 들어있는지에 대한 정보가 주를 이룬다.
      메타데이터 기능
      FsImage(파일 시스템 이미지) 블록의 네임스페이스를 포함한 데이터 블록 등 데이터의 모든 정보
      - HDFS가 시작될 때 한 번 생성되면 변경되지 않는다. 
      EditLog  데이터노드에서 발생한 데이터 변환 내역. HDFS의 파일 생성, 삭제, 수정, 트랜잭션 등에 대한 모든 정보
      - 계속해서 증가할 수 있으며, HDFS가 작동하는 동안 변경 사항이 지속적으로 로그에 추가된다.
  2. 데이터 노드를 관리
    • 데이터 노드는 일정 주기마다 네임노드에게 자신의 상태를 알리는 HeartBeat Packet을 전송
    • HeartBeat Packet을 통해 네임노드에서 데이터 노드의 상태를 알 수 있다.
    • 데이터 노드는 네임 노드에게 블록 리포트도 전송하여 어떤 파일 작업이 일어났는지도 보고한다.

Secondary Namenode

네임노드에 대한 FsImage와 EditLog를 주기적으로 병합하는 체크포인트 과정 수행

  • Secondary Namenode는 네임노드의 로그 파일인 EditLog의 크기가 계속해서 증가하는 상황을 관리한다.
  • 네임노드가 이중화된 노드가 아니고, 네임노드의 스탠바이 역할이나 백업이 아니다. 
  • EditLog의 크기를 제어하고 체크포인트 작업을 수행하여 네임노드의 성능을 개선한다.
  • 체크포인트 과정: 주기적으로 Secondary Namenode는 Namenode의 FsImage와 EditLog를 합쳐서 새로운 FsImage를 생성하는 과정을 의미한다.
    • 새로운 FsImage가 생성되면, EditLog는 초기화되고 비어있는 상태가 된다. 
    • 이렇게 주기적으로 FsImage와 EditLog를 합쳐서 새로운 FsImage를 생성함으로써, EditLog의 크기를 제어하고 네임노드가 시작될 때 EditLog를 메모리에 로딩하는 시간을 단축할 수 있다.
      체크포인트 과정 내용
      1. Roll Edits - EditLog에 Rolling을 요청한다.
      - Rolling: 현재 로그를 새로운 이름으로 변경하고, 기존의 이름으로 새로운 로그의 파일을 생성하는 것
      2. Retrieve FsImage and EditLogs from Primary - HDFS에 변경이 일어나 EditLog에 대한 롤링이 발생되면 세컨더리 네임노드는 네임노드로부터 기존의 EditLog와 FsImage를 다운로드 받는다.
      3. Merge - 다운로드가 완료되면 세컨더리 네임노드는 기존의 EditLog와 FsImage를 병합한다.
      4. Transfer checkpoint to Primary - 병합이 완료되면 완료된 FsImage를 다시 네임노드에 업로드 한다.
      5. Roll FsImage.ckpt and Editing - 업로드된 FsImage를 네임노드에서 교체한다.

 

Datanode

실제 파일을 저장하고, 현재 자기 자신의 상태를 주기적으로 네임노드에게 알려주는 역할

  1. 실제 파일을 저장하는 역할을 수행
      • 저장: 파일은 블록 단위로 저장된다.
  2. 현재 자기 자신의 상태를 주기적으로 네임노드에게 알려준다.
    • 현재 자기 자신의 상태를 HeartBeat Packet을 통해 주기적으로 네임노드에게 알려준다. 만약 네임노드가 데이터노드의 HeartBeat Packet을 받지 못한다면 데이터노드가 동작하지 않는 것으로 간주하고, 해당 데이터 노드에 데이터를 저장하지 않도록 설정한다.
  3. 블록 레포트 작성
    • 저장하고 있는 블록의 변경사항을 체크하고, 블록 레포트를 작성하여 네임노드에게 전달한다. 네임노드는 이런 블록 레포트를 통해 메타 데이터를 갱신하게 된다.

 

🗄️HDFS의 저장, 연산 방식

HDFS 저장 방식

 

출처: 멀캠 소민호 강사님

 

예시: 375MB의 데이터를 세 대의 데이터 노드에 저장하는 상황이다. 복제 인수(Rreplication Factor)는 2로 설정했다.

예시와 같은 상황에서는 375MB의 데이터를 128MB의 파일로 나누어야 하기 때문에, 총 128+128+118MB 의 3개의 블록이 생성된다. 이 3개의 블록은 하나의 데이터 노드에 저장되는 것이 아닌 여러 노드에 걸쳐 저장된다. 이 때 복제 인수를 2로 설정했기 때문에 데이터 블록은 2개씩 만들어진다. 

 

HDFS 읽기, 쓰기

HDFS 사용 순서

1. HDFS 클라이언트에 의한 파일 작성/읽기 요청 사용자나 응용 프로그램은 HDFS 클라이언트를 통해 HDFS에 파일을 작성하거나 읽는 작업을 수행한다.
2. Namenode에 파일 생성/읽기 요청 전송 클라이언트는 파일을 생성하거나 읽기 위해 네임노드에 요청을 전송한다.
3. Namenode의 meta data 확인 Namenode는 해당 파일의 meta data를 확인하고 클라이언트에게 응답한다.
Meta data에는 파일 블록 목록, 각 블록 위치, 복제본에 대한 정보 등이 포함되어 있다.
4. 클라이언트에게 블록 위치 제공 Namenode가 meta data를 클라이언트에게 전달하면, 클라이언트는 각 블록이 저장도니 데이터 노드의 위치를 알게 된다.
5. Datanode에 데이터 전송 클라이언트는 HDFS에 데이터를 저장하거나 읽기 위해 각 블록을 저장하는 데이터 노드에 직접 연결한다. 데이터 블록이 여러 복제본을 가지고 있으므로, 클라이언트는 복제된 블록 중 하나를 선택하여 데이터를 읽거나 쓸 수 있다.
6. 데이터 전송과 블록 복제 클라이언트에게 데이터가 전송되고, HDFS는 각 블록을 여러 데이터 노드에 복제하여 데이터의 안전성을 보장한다.
7. 응답 및 작업 완료 클라이언트가 데이터를 읽거나 쓴 후, HDFS는 해당 작업이 성공적으로 완료되었음을 클라이언트에게 응답한다.