Hadoop 최종 가이드 – 3장 Hadoop 분산 파일 시스템

3장 – Hadoop 분산 파일 시스템

Hadoop은 HDFS(Hadoop Distributed FileSystem)라는 분산 파일 시스템을 제공합니다. 하둡의 대표적인 파일 시스템으로 범용 파일 시스템을 추구하기 때문에 추상화 개념을 가지고 있다.

HDFS 테마

HDFS에는 다음과 같은 설계 기능이 있습니다.

  • 매우 큰 파일 저장
    또한 단일 저장소에서 처리할 수 없는 페타바이트의 데이터를 저장할 수 있습니다.
  • 스트리밍 데이터 액세스
    HDFS는 “가장 효율적인 데이터 처리 패턴은 한 번 쓰고 여러 번 읽는 것”이라는 생각에서 시작되었습니다. 여러 번 작성하는 것이 아니기 때문에 일부 데이터를 탐색하는 데 걸리는 시간이 아닌 전체 데이터 세트를 읽는 데 걸리는 시간을 줄이는 방법에 개발에 주의를 기울였습니다.
  • 범용 하드웨어 사용 가능
    고장 확률이 높은 범용 하드웨어에서 작동하도록 설계되었습니다. 장애로부터 자동 복구할 수 있도록 설계

이러한 특성을 가진 HDFS는 빠른 데이터 응답 시간/많은 작은 파일/여러 작성자 및 파일의 임의 변경이 필요한 경우에는 적합하지 않습니다.

HDFS 개념

차단하다

물리적 디스크에서 차단동시에 읽고 쓸 수 있는 최대 데이터 양입니다. 단일 디스크 파일 시스템은 일반적으로 디스크 블록 크기의 정수배이고 일반적으로 크기가 512바이트인 파일 시스템 블록 단위로 데이터를 처리합니다.

HDFS의 블록기본적으로 매우 큰 단위입니다. 나. 128MB. HDFS의 파일은 단일 디스크의 파일 시스템과 같이 특정 블록 크기의 청크로 분할되고 각 청크는 독립적으로 저장됩니다. HDFS 블록 크기가 큰 이유는 검색 비용을 최소화하기 위함입니다.해야합니다.

단일 디스크에서는 디스크의 블록 크기보다 작은 데이터라도 전체 블록을 차지합니다.하지만, HDFS 파일은 데이터가 블록 크기보다 작은 경우 전체 블록 크기에 대해 전체 서브 디스크를 차지하지 않습니다.. 이 때문에 블록 크기가 크더라도 디스크 낭비가 없습니다.

이러한 분산 파일 시스템의 블록 추상화 개념은 도입되었을 때 몇 가지 이점이 있습니다.

  • 단일 하드 드라이브의 용량을 초과하는 단일 파일을 저장할 수 있습니다.
    단일 디스크의 용량을 초과하더라도 여러 블록을 분할하여 다른 디스크에 저장할 수 있습니다.
  • 스토리지 하위 시스템을 더 간단하게 만들 수 있습니다.
    블록은 저장된 데이터의 일부일 뿐이며 다음과 같은 파일의 메타데이터입니다. B. 권한 정보는 블록과 함께 저장할 필요가 없습니다.
  • 내결함성 및 가용성을 제공하는 데 필요한 복제 구현에 적합
    블록 손상 또는 시스템 장애로 인해 블록을 사용할 수 없게 되면 다른 블록을 장애 조치에 사용할 수 있습니다.

이름 노드 및 데이터 노드

HDFS 클러스터 마스터 작업자 패턴로 작동 마스터인 네임노드그리고 작업자로서의 다중 DataNodes그것은 구성

이름 노드 파일 시스템 네임스페이스 관리하다. 파일 시스템 트리와 해당 트리에 포함된 모든 파일 및 디렉터리에 대한 메타데이터를 관리합니다.그리고 이 정보 네임스페이스 이미지그리고 로그 편집 이름이 지정된 두 가지 유형의 파일 로컬 하드 드라이브에 영구 저장하다. 블록 위치 정보시스템이 시작될 때 모든 데이터 노드에서 수신하여 재구성때문에 디스크에 영구적으로 저장되지 않음

데이터노드는 클라이언트 또는 네임노드로부터 요청을 받습니다. 블록 저장 및 탐색그리고 주기적으로 저장된 블록 목록을 네임노드에 보고하다.

장애 복구 기능은 파일 시스템이 노드 이름 없이는 작동하지 않기 때문에 필수적입니다. Hadoop은 이를 위해 두 가지 메커니즘을 제공합니다.

  1. 파일 시스템 메타데이터 파일을 백업하는 방법
    여러 파일 시스템에 걸쳐 영구 상태를 저장하도록 Hadoop 구성5월, 권장되는 방법은 로컬 및 원격 디스크를 모두 NFS 마운트하는 것입니다. 동시에 두 위치에 백업하는 것이다
  2. 보조 네임노드 작업
    보조 네임 노드는 편집 로그가 너무 커지는 것을 방지하기 위해 주기적으로 편집 로그를 네임스페이스 이미지와 병합하여 새로운 네임스페이스 이미지를 생성합니다. 또한 메인 네임노드의 장애에 대비하여 네임스페이스 이미지의 복제본 유지약간 오프셋으로 복제되기 때문에 데이터 손실이 발생할 수 있습니다. HDFS 고가용성에서 대기 네임노드는 보조 네임노드의 역할을 맡습니다.하다.

블록 캐싱

자주 액세스하는 파일 차단 오프힙 블록 캐시 DataNode의 메모리에 명시적으로 캐시될 수 있습니다. 작업 스케줄러는 블록이 캐시된 데이터 노드에서 작업을 실행할 수 있으며 블록 캐시를 사용하여 읽기 성능을 향상시킬 수 있습니다. 얻다캐시 풀/캐시 지시문을 추가하여 특정 파일을 캐시하도록 사용자 또는 애플리케이션에 지시합니다.할수있다.

HDFS 페더레이션


다중 네임노드/네임스페이스

네임 노드는 파일 시스템의 모든 파일과 블록에 대한 참조 정보를 메모리에 유지합니다. 따라서 파일이 많은 대규모 클러스터에서 메모리는 확장성에 가장 큰 장애물입니다. 네임노드 확장성 문제를 해결하기 위해 HDFS 연합이 지원됩니다. HDFS 페더레이션 사용 각 네임노드가 파일 시스템 네임스페이스의 일부를 공유하고 관리하는 방식다음을 사용하여 새 NameNode를 추가할 수 있습니다.

HDFS 고가용성(HA)

위의 두 네임노드 오류 복구 메커니즘(파일 백업 및 네임노드 보조 작업)만으로는 파일 시스템의 고가용성을 보장할 수 없습니다. 네임노드는 여전히 SPOF(Single Point of Failure)이기 때문에 장애 발생 시 모든 클라이언트가 파일을 읽거나 쓰거나 검색할 수 있는 것은 아닙니다.

기존 네임노드의 장애 발생 시 새로운 네임노드는 다음과 같은 작업을 수행해야 합니다.

  1. 네임스페이스 이미지를 메모리에 로드
  2. 편집 로그 업데이트
  3. 모든 데이터 노드에서 충분한 블록 보고서 수신(안전 모드를 종료할 때까지 요청을 처리할 수 없음)

파일과 블록이 많으면 다시 시작하는 데 시간이 오래 걸립니다. 이를 해결하기 위해 Hadoop 2.x부터 HDFS 고가용성을 지원하고 있다. 고가용성은 활성 대기로 구성된 한 쌍의 네임노드로 구현됩니다.활성 네임노드가 실패하면 대기 네임노드가 인계받아 클라이언트 요청을 처리합니다. 이러한 고가용성을 지원하기 위해 HDFS의 구조가 부분적으로 변경되었습니다.

  • 네임노드는 고가용성 공유 스토리지를 사용하여 편집 로그를 공유해야 합니다.
    대기 네임노드가 활성화되면 먼저 공유 편집 로그를 읽어 기존 활성 네임노드의 상태를 동기화한 다음 활성 네임노드에 새로 추가된 항목을 읽습니다.
  • 데이터 노드는 블록 보고서를 두 개의 이름 노드로 보내야 합니다. 블록 매핑 정보는 디스크가 아닌 네임노드의 메모리에 저장되기 때문이다.
  • 클라이언트는 사용자에게 투명한 방식으로 네임노드 실패를 처리하도록 구성되어야 합니다.
  • 대기 네임노드는 보조 네임노드의 역할을 하며 활성 네임노드 네임스페이스의 체크포인트를 주기적으로 수행합니다.

고가용성 공유 스토리지의 경우 NFS 필러 또는 QJM(Quorum Journal Manager)을 선택할 수 있습니다.

장애 조치 및 펜싱

대기 네임노드를 활성화하는 전환 작업장애 조치 컨트롤러라는 새 개체로 관리됩니다. 기본 구현에서는 ZooKeeper를 사용하여 NameNode 하나만 활성화되도록 합니다. 하트비트 방식을 사용하여 네임노드 장애를 모니터링하고 장애 시 복구를 지시합니다.

장애 조치는 정상적인 장애 조치로 알려진 관리자가 수동으로 시작할 수 있습니다. 장애 조치 컨트롤러는 두 네임노드의 역할을 교환하여 전환 순서를 제어할 수 있습니다.

우아하지 않은 장애 조치의 경우 실패한 NameNode가 현재 실행되고 있지 않은지 확인하기 어렵습니다. 장애 조치 전환 작업이 시작된 후에도 기존 활성 네임노드가 실행 중이라고 잘못 생각할 수 있습니다. 기존 활성 네임노드의 손상 또는 파괴를 방지하기 위한 펜싱방법을 사용할 수 있습니다. 펜싱에는 몇 가지 방법이 제공됩니다. B. SSH 펜싱 명령어로 네임노드의 프로세스를 죽이기 / 네임노드가 공유 저장소 디렉터리에 접근하지 못하도록 막는다.

명령줄 인터페이스