하둡 분산 파일시스템(HDFS)

qwer·2022년 3월 19일
1

Apache Hadoop

목록 보기
1/2

개요

  • 데이터가 단일 물리 머신의 저장 용량을 초과하게 되면 전체 데이터셋을 분리된 여러 머신에 나눠서 저장해야 함
  • 네트워크로 연결된 여러 머신의 스토리지를 관리하는 파일시스템을 분산 파일시스템 이라고 함
  • 분산 파일시스템의 목표는 특정 노드에 장애가 발생해도 자료가 유실되지 않는 것
  • 하둡은 HDFS(Hadoop Distributed FileSystem)이라는 분산 파일시스템을 제공

HDFS 특징

장점

  • 매우 큰 파일 저장 가능
  • 스트리밍 방식의 데이터 접근
  • 범용 하드웨어
    • 고가의 신뢰도 높은 하드웨어가 아니어도 됨

적합하지 않은 분야

  • 빠른 데이터 응답 시간
    • HDFS는 빠른 응답 시간보다 높은 데이터 처리량을 제공하기 위해 최적화 되어 있음
  • 수많은 작은 파일
    • 네임노드는 파일시스템의 메타데이터를 메모리에서 관리하기 때문에 저장할 수 있음
    • 이 때문에 저장할 수 있는 파일 수는 네임노드의 메모리 용량에 좌우됨
  • 다중 writer와 파일의 임의 수정
    • 파일의 임의 위치에 있는 내용을 수정할 수 없음
    • 한 번 쓰고 끝나거나 파일의 끝에 덧붙이는 작업만 가능
    • 단, 하둡 3.0부터는 다중 writer를 지원

HDFS 개념

블록

  • HDFS의 블록은 기본적으로 128MB의 크기
  • HDFS 블록이 큰 이유
    • 탐색 비용을 최소화하기 위함
    • 블록이 매우 크면 블록의 시작점을 탐색하는 데 걸리는 시간을 줄일 수 있고 데이터를 전송하는데 집중할 수 있음
  • 블록의 장점
    • 파일 하나의 크기가 단일 디스크의 용량보다 더 커질 수 있음
    • 파일 단위보다 블록 단위로 추상화를 하면 스토리지의 서브시스템을 단순하게 구성 가능
    • 내고장성(fault tolerance)와 가용성(availability)을 제공하는 데 필요한 복제(replication)를 구현하기에 적합
      • 각 블록은 물리적으로 분리된 다수의 머신에 복제

네임노드와 데이터노드

  • HDFS 클러스터는 master-worker 패턴으로 동작하는 네임노드(master)와 여러 개의 데이터노드(worker)로 구성
  • 네임노드
    • 파일시스템의 네임스페이스를 관리
    • 파일시스템 트리와 그 트리에 포함된 모든 파일과 디렉토리에 대한 메타데이터를 유지
  • HDFS 클라이언트
    • 사용자를 대신해서 네임노드와 데이터노드 사이에서 통신하고 파일시스템에 접근
    • 사용자는 네임노드와 데이터노드에 관련된 함수를 몰라도 코드를 작성 가능
  • 데이터노드
    • 파일시스템의 실질적인 일꾼
    • 클라이언트나 네임노드의 요청이 있을 때 블록을 저장하고 탐색
    • 저장하고 있는 블록의 목록을 주기적으로 네임노드에 보고
  • 네임노드가 손상되면 파일시스템의 어떤 파일도 찾을 수 없기 때문에 장애 복구기능이 매우 중요
  • 하둡은 두 가지의 장애복구 메커니즘을 제공
    1. 파일시스템의 메타데이터를 지속적으로 파일로 백업
    2. 보조 네임노드(secondary namenode)를 운영
      • 주기적으로 네임스페이스 이미지를 에디트 로그와 병합하여 새로운 네임스페이스 이미지 생성
      • 네임노드의 장애에 대비해 네임스페이스 이미지의 복제본을 보관

블록 캐싱

  • 데이터노드는 빈번하게 접근하는 블록 파일은 off-heap(자바 힙 외부에서 관리됨) 블록 캐시(block cache)라는 데이터노드의 메모리에 캐싱 가능
  • 기본적으로 블록은 하나의 데이터노드 메모리에만 캐싱되지만 파일 단위로도 설정 가능
  • 잡 스케줄러(맵리듀스, 스파크 등)는 블록이 캐싱된 데이터노드에서 태스크가 실행되게 할 수 있음

HDFS 페더레이션

  • 네임노드는 파일시스템의 모든 파일과 각 블록에 대한 참조 정보를 메모리에서 관리
  • 따라서 대규모 클러스터에서 메모리는 확장성에 가장 큰 문제
  • 이러한 네임노드의 확장성 문제 해결을 위해 2.X 릴리즈부터 HDFS 페더레이션(federation)을 지원
  • 페더레이션은 각각의 네임노드가 파일시스템의 네임스페이스 일부를 나누어 관리하는 방식으로 새로운 네임노드를 추가 가능
    • 예를 들어 특정 네임노드는 /user 디렉토리 아래의 모든 파일을 관리하고 다른 네임노드는 /share 디렉터리 아래의 파일을 관리

HDFS 고가용성

  • 네임노드 메타데이터를 다수의 파일시스템에 복제하는 방식과 보조 네임노드를 사용하는 방식도 파일시스템의 고가용성을 보장하진 않음
  • 네임노드의 장애를 복구하기 위해 관리자는 파일시스템의 메타데이터 복제본을 가진 새로운 네임노드를 구동하고 모든 데이터노드와 클라이언트에 새로운 네임노드를 사용하도록 알려줘야 함
    • 이 방식의 경우 대규모 클러스터의 경우 재구동이 30분 이상 걸리는 경우도 있음
  • 하둡 2.X 릴리즈부터 HDFS 고가용성을 지원
  • 고가용성은 활성대기(active-standby) 상태로 설정된 한 쌍의 네임노드로 구현
  • 활성 네임노드에 장애가 발생하면 대기 네임노드가 역할을 이어받아 큰 중단없이 요청을 처리

참고자료

1개의 댓글

comment-user-thumbnail
2022년 6월 28일

하둡 규모가 어느정도 돼야 쓰는건가요?

답글 달기