티스토리 뷰

BigData/Hadoop

HDFS(Hadoop Distributed File System)

맥모닝프로 2024. 1. 4. 19:14

HDFS(Hadoop Distributed File System)이란?

  • HDFS는 상용 하드웨어에서 실행되도록 설계된 분산 파일 시스템
  • HDFS는 내결함성이 높고 저비용 하드웨어에서 동작하도록 설계
  • 내부적으로 파일은 하나 이상의 블록으로 분할되어 DataNode 세트에 저장

NameNode & DataNode

  •  HDFS는 Java를 지원하는 모든 시스템에서 NameNode 또는 DataNode 소프트웨어 실행 가능
  • 이식성이 뛰어난 Java를 사용하여 HDFS를 다양한 시스템에 배포 가능
  • NameNode: DFS(Distributed File System)에 대한 정보들을 지니고 있음
    • 파일 시스템 네임스페이스 관리
    • 파일 및 디렉터리 열기, 닫기 및 이름 바꾸기 와 같은 파일 시스템 네임스페이스 작업을 실행
    • DataNode에 대한 블록 매핑을 결정
    • Namenode는 HeartBeat를 활용하여 Datanode의 실행상태와 용량을 확인 → HeartBeat를 전송하지 않는 Datanode는 장애 서버라고 판단
    • Block 관리: 장애가 발생한 Datanode의 block을 새로운 Datanode에 복제 →  용량이 부족하다면 여유가 있는 Datanode로 block으로 이동
  • DataNode
    • 파일 시스템 클라이언트의 읽기 및 쓰기 요청을 처리
    • 클라이언트가 저장한 데이터 블록을 로컬 디스크에 저장

HDFS Architecture


파일 시스템 네임스페이스

  • HDFS는 기존의 계층적 파일 구성을 지원
  • 사용자나 애플리케이션은 디렉토리를 구성하고 이 디렉토리 안에 파일을 저장 가능
  • 파일  시스템 네임스페이스 계층 구조는 대부분의 다른 기존 파일 시스템과 유사
  • 파일을 생성 및 제거, 이름변경, 다른 디렉토리로 이동, 파일명 변경 가능

데이터 복제

  • HDFS는 대규모 클러스터 시스템 간에 매우 큰 파일을 안정적으로 저장
  • 각 파일들을 일련의 블록(기본 64MB)으로 저장이된다.
  • 내결함성을 위해서 파일 블록은 단일로 존재하지 않음
  • 블록의 크기와 복제 갯수는 파일별로 구성 가능
  • 복제 설정은 파일 생성 시 지정할 수 있으며 추후에도 변경 가능
  • HDFS는 엄격하게 한 명의 사용자만 사용 가능
  • NameNode는 블록 복제에 대해 모든 결정을 내림
  • 클러스터의 각각 DataNode로부터 정기적으로 HeartBeat와 BlcokReport를 수신
  • HeartBeat 수신은 DataNode가 정상적으로 동작하고 있음을 의미
  • BlockReport는 DataNode의 모든 블록 목록이 포함

Block Replication

editlog&fsimage

    • editlog: HDFS의 파일 추가/삭제/이름 변경/이동에 대한 모든 이력을 저장
    • fsimage: NameNode가 시작될 때의 파일 시스템의 스냅샷
    • editlog가 일정 수준 이상이 되면은 지금까지의 editlog를 반영한 fsimage를 생성
    • fsimage는 시스템이 부트될 때만 fsimage를 로드 → 즉, 런타임 중에 많은 변경후 NameNode가 다운되어 업데이트 되지 않아 변경이후 fsimage 영구 손실 우려 존재
    • editlog 파일은 런타임 동안 모든 변경 이력을 저장 → 기존 fsimage에 editlog에서 찾은 모든 변경사항을 적용하여 새로운 fsimage를 생성하여 손실 복원( 이 과정은 NameNode 서버가 시작될 때만 발생)

  • VERSION: 현재 실행 중인 HDFS의 ID, 타입 등 정보
  • edits_0000xxx-0000xxx: 트랜잭션 정보. edits_트랜잭션시작번호-트랜잭션종료번호 까지의 정보를 저장
  • eidts_inprogress_000xx: 최신 트랜잭션 정보. 압축되지 않은 정보
  • fsimage_000xxx: 000xxx 까지 트랜잭션 정보가 처리된 fsimage
  • fsimage_000xxx.md5: fsiamge의 해쉬값
  • seen_txid: 현재 트랜잭션 ID

Secondary Name Node

    • editslog가 커지게 되면 fsimage를 만드는데 많은 시간이 소요됨 → 이를 해결하기 위해 Secondary Name Node가 등장
    • NameNode에서 일정 주기로 editlog 정보를 받아 fsimage 갱신
    • 새 fsimage가 생성되면 업데이트된 fsimage를 NameNode로 복사
    • NameNode는 재시작을 위해 업데이트된 fsimage를 사용 → fsimage 생성 시간 축소 (즉, 백업이 아님)

파일 삭제 및 삭제 취소

  • 사용자나 애플리케이션이 파일을 삭제하면 HDFS에서 즉시 제거되지 않음
  • 삭제시 HDFS는 먼저 /trash 디렉터리에 있는 파일로 이름을 변경
  •  파일이 /trash 에 남아 있는 한 빠르게 복원 가능
  •  /trash 에서 수명이 만료된 후 NameNode는 HDFS 네임스페이스에서 파일을 삭제 → 파일을 삭제하면 파일과 관련된 블록이 해제

 

💡내결함성: 시스템의 일부 구성 요소가 작동하지 않더라도 계속 작동할 수 있는 기능, 네임스페이스: 파일에 이름을 할당하는 이름공간

'BigData > Hadoop' 카테고리의 다른 글

[hadoop] Namenode Federation 훑어 보기  (1) 2024.06.18
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
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 31
글 보관함