HDFS 작동방식

김형수·2022년 12월 20일
0

Hadoop

목록 보기
8/11

HDFS

빅데이터를 전체 클러스터에 분산해 안정적으로 저장하여 애플리케이션이 그 데이터를 신속하게 액세스해 분석할 수 있게함.

  • HDFS는 대용량 파일들을 다루기 위해 만들어짐.

  • 대용량 파일들을 작은 조각으로 나누어 클러스터 전체에 걸쳐 분산시키는데 최적화되어있다.
    - 대용량 파일 즉 빅데이터를 '데이터 블록'으로 나눔.

    • 기본값은 128MB 혹은 그 이하
    • 대용량 파일을 블록으로 나눔으로써 더 이상 하드 드라이브의 용량에 제한되지 않게한다.
  • HDFS는 이 대용량 파일을 분산해서 처리.

  • 대용량 파일을 쪼개 여러 컴퓨터에 걸쳐 저장했다면 각 컴퓨터는 자기에게 저장된 데이터 블록을 동시에 처리할 수 있게된다.

  • 데이터를 효율적으로 엑세스할 수 있도록 데이터 블록을 처리하는 컴퓨터가 해당 블록이 저장된 곳이랑 가까운 거리에 있도록 조정함.

  • 단 하나의 블록만 저장하지 않는다.
    - 모든 블록마다 두 개 이상의 복사본을 저장.

    • 어떤 컴퓨터가 다운되더라도 HDFS가 그 블록의 백업 복사본을 갖고 있는 다른 컴퓨터에서 정보를 불러올 수 있도록 하기 위함.
  • HDFS는 클러스터의 수많은 컴퓨터에 걸쳐 분산되어 있고 실패 회복력과 큰 가능성이 있지만 결국에는 파일 시스템을 갖춘 거대한 하드 드라이브.

Name Node

  • 어느 블록이 어디에 있는지를 추적.
  • 파일의 이름과 HDFS 내의 가상 디렉터리 구조 등의 정보가 있고 그 파일과 관련된 모든 블록과 해당 복사본들이 어떤 노드에 저장되어 있는지를 기록.
  • 어떤 게 수정되고 저장되는지 등의 정보가 Edit log에 기록됨.
  • 모든 '데이터 노드'(Data Node)에 무엇이 있는지는 이름 노드에 기록되고 클라이언트 애플리케이션은 '이름 노드'(Name Node)에 쿼리해 어디로 가야할지 알아낸 다음 궁극적으로 그 '데이터 노드'에 엑세스함.

Data Node

  • 실제 파일의 블록을 저장하고 있는 곳.
  • Name Node와 블록의 복사본을 잘 유지하기 위해 서로 소통함.

In HDFS Read File

  • '이름 노드'에게 파일 A가 필요하다고 전송.
  • '이름 노드'는 파일 A는 이러이러한 '데이터 노드'의 요러요러한 블록들에 저장되어 있다고 알려줌.
  • 클라이언트 애플리케이션은 해당 '데이터 노드'에 방문해 그 블록들을 가져와 파일 A를 구성.

'이름 노드'에게 그 파일이 어떤 '데이터 노드'의 어느 블록에 있는지 어떤 '데이터 노드'에 가는 게 가장 효율적인지 등을 물어보면 '이름 노드'가 어디 어디로 가야 한다고 알려준다는 개념

How To Write To HDFS

  • 클라이언트 애플리케이션이 HDFS에 새 파일을 만들려고 할 때 먼저 블록의 위치를 추적하는 '이름 노드'에게 요청.
  • '이름 노드'는 새 파일 항목을 확인하고 그 블록의 위치를 정한 후에 클라이언트에게 어느 '데이터 노드'에 가서 저장하라고 알려줌.
  • 클라이언트는 정해진 '데이터 노드'에게 가서 파일을 건네줌.
  • 그 '데이터 노드'는 주변의 다른 '데이터 노드'에 복사본을 전달하고 또 전달.

'이름 노드'에서 전달받은 정보를 클라이언트가 '데이터 노드'에게 전달하고 그 '데이터 노드'는 '데이터 노드'끼리 전달. 그리고 데이터가 저장되면 잘 받았다는 신호를 클라이언트를 통해 '이름 노드'로 보냄. 그러면 '이름 노드'는 새로운 파일의 블록과 복사본의 위치를 기억함.

  • '이름 노드'는 그 파일이 존재하며 여러 '데이터 노드'에 걸쳐 복제되어 저장되었음을 기록.

When Name Node is Unavailable

  • 메타데이터를 계속 백업.
  • 이차적 이름 노드를 운영.
    - '동적 백업'(hot backup)이 아님. 동시에 운영하지 않기 때문.
    • '주 이름 노드'의 편집 로그 복사본을 유지하는것.
  • HDFS 연합(Federation).
    - HDFS는 많은 수의 작은 파일보다는 대용량 파일을 다루는데 최적화돼 있음.
    • 이름 노드는 한계점에 다다랐을 때, HDFS 연합은 HDFS 파일 구조 내에 '명칭 공간 볼륨'(namespace volume)이라고 부르는 서브디렉터리마다 분리된 이름 노드를 지정함.
    • 그러면 각 볼륨마다 데이터 파일을 읽거나 쓸 때 어떤 이름 노드와 얘기해야 하는지 알 수 있음.
  • 'HDFS 고가용성(High Availability)'을 사용해 '동적 예비 이름 노드'를 운영.
    - 공유 편집 로그를 활용하여 이름 노드가 HDFS가 아닌 다른 안전한 공유 저장소에 편집 로그를 작성.
    - 주 이름 노드가 다운되면 '동적 예비 이름 노드'가 바로 업무를 이어받음.
    - Zookeeper가 어떤 이름 노드를 사용한다고 하면 다른 이름 노드의 전원을 완전히 차단해버려 어떤 클라이언트도 이 노드와 소통하지 못하게 함.

    HDFS 고가용성을 사용할 때 예로 두 개의 이름 노드가 동시에 작동할 수도 있음. 쓰기 요청을 받을 때 한 이름 노드는 그 데이터가 어디에 있는지 알고 다른 노드는 모를 수 있는 문제가 생길 수 있음.

How To Use HDFS

  • 유저 인터페이스를 사용.
  • 명령줄 인터페이스.
  • HTTP.
    - 직접적으로 하거나 프락시 서버를 활용.
    • 프락시 서버는 HDFS 머신과 클라이언트 사이에 위치.
    • 데이터를 분석하기 위해 스크립트를 작성하거나 애플리케이션 개발을 위해 이 프락시 서버에 웹 인터페이스를 구성.

0개의 댓글