하둡을 간략하게 정의하면 '분산 저장 & 분산 처리'라고 표현할 수 있습니다.
  대량의 데이터를 다수의 데이터 노드에 분산하여 저장을 하고, 다수의 프로세스가 작업을 분배하여 처리하는 방식이기 때문입니다.

  하둡에서의 분산 저장과 분산 처리 기술 중에서 분산 저장을 담당하는 것이 바로 HDFS(Hadoop Distributed File System)입니다.

  HDFS도 다른 파일 시스템처럼 계층적 파일 구조를 지원합니다. 디렉토리나 파일을 생성/삭제/이동할 수 있으며, 디렉토리 안에 하위 디렉토리를 생성할 수 있습니다. 또한, 용량이나 파일 개수 할당 제한도 설정 가능하며, 접근 권한 설정도 가능합니다.

HDFS 브라우저

 

  그럼 다른 파일 시스템과 비교하여 HDFS만의 특징은 무엇이 있을까요?

   - 높은 장애 결함 허용성(내결함성)
   - 저비용의 범용 하드웨어 기반으로도 효율적인 분산 파일 시스템 구성 가능
   - 대용량의 데이터 셋을 액세스 할 수 있는 높은 처리량
   - 파일 시스템 데이터를 스트리밍 액세스 방식으로 처리 가능 

  위와 같은 HDFS만의 특징으로 대용량의 데이터를 안정적으로 관리할 수 있게 됩니다.

  구체적으로 HDFS에서 대용량의 데이터를 관리하는 방법에 대해 알아보도록 하겠습니다.

 

  우선, HDFS의 아키텍처는 마스터/슬래이브 구조입니다.

네임노드(NameNode) 데이터노드(DataNode)

  HDFS 클러스터는 하나의 네임노드(마스터)와 하나 이상의 데이터노드(슬래이브)로 구성됩니다.

  네임노드는 파일 시스템 네임스페이스를 관리하고 클라이언트에 의한 파일 액세스를 조정하는 역할을 담당합니다.
  네임스페이스를 실행하여 파일과 디렉토리를 열거나 닫고, 이름을 변경하는 작업 등을 처리하고 데이터노드와 블럭의 매핑 정보를 관리합니다. 

  데이터노드는 파일 시스템 클라이언트로부터의 파일 읽기/쓰기 요청을 수행합니다. 또한 네임노드의 요청에 따라 블럭 생성/삭제/복제를 수행합니다.

  하둡 클러스터에 저장되는 파일은 하나 이상의 블럭으로 쪼개져 다수의 데이터노드에 분산되어 저장됩니다.

 

 

데이터 복제

  HDFS에서 장애 결함 허용이 가능한 이유는 데이터 복제 기능을 제공하기 때문입니다.

  HDFS는 대규모 클러스터의 여러 시스템(데이터노드)에 걸쳐 매우 큰 파일을 안정적으로 저장하도록 설계되었습니다. 각 파일은 연속된 블록으로 저장되는데, 내결함성을 위해 파일 블록은 복제되어 여러 데이터노드에 분산되어 저장됩니다. 블록 크기 및 복제 계수(replication factor)는 파일 별로 설정할 수 있습니다.

  네임 노드는 주기적으로 클러스터의 각 데이터노드에서 하트 비트 및 블록 보고서를 받습니다. 하트 비트를 수신하면 데이터 노드가 제대로 작동하고 있음을 나타냅니다. 만약, 네임노드가 특정 데이터노드로부터 하트 비트를 수신받지 못했다면, 네임노드는 해당 데이터노드를 사용불능(dead) 상태로 등록하고, 사용불능인 데이터노드에 저장되어 있던 복제본을 다른 데이터노드에 복제하여 블록의 복제본의 수가 복제 계수와 동일하도록 관리하게 됩니다.

  복제본의 배치 전략은 HDFS의 성능, 가용성, 안정성을 좌우하는 중요한 요소입니다.
  복제본은 여러 랙에 걸쳐 저장될 수 있습니다. 일반적으로 동일한 랙 안에 설치된 서버간의 네트워크 대역폭이 다른 랙에 설치된 서버와의 네트워크 대역폭보다 더 큽니다. 네트워크 성능을 고려하면 동일한 랙에 위치한 서버에 복제본을 저정하는 것이 효율적일수도 있겠지만, 하나의 랙안의 모든 서버가 동시에 장애가 발생할 수 있다는 사실을 간과할 수는 없습니다. 네트워크 성능과 안정성이 Trade-off 관계인 것입니다.

  일반적으로 복제 계수가 3인 경우에 로컬 장비(Writer가 위치한 데이터노드)에 하나의 복제본을 저장하고 로컬 장비와 동일한 랙에 위치한 다른 장비와 다른 랙에 위치한 장비에 나눠서 복제본을 저장하게 됩니다.

 

 

파일시스템 메타데이터 관리

  HDFS 파일시스템 네임스페이스는 파일에 대한 블록 매핑 및 파일 시스템 프로퍼티 정보를 포함하고 있습니다. 이 파일시스템 네임스페이스는 네임노드의 로컬 OS 파일시스템에 FsImage라는 파일로 저장되어 있습니다.

  HDFS 파일 시스템에 변경(예를 들어 신규 파일 생성)이 발생하면 변경 내역을 즉시 FsImage에 저장하지는 않습니다.
  변경 내역은 EditLog라는 파일(FsImage처럼 네임노드의 로컬 OS 파일 시스템에 저장)에 우선 기록되며, checkpoint가 발생하는 시점(dfs.namenode.checkpoint.period 설정 값에 따라 주기적으로 발생)에 EditLog에 기록된 변경내역이 FsImage에 일괄적으로 반영되게 됩니다.

 

 

 

[Ref.] : https://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html

 

+ Recent posts