4학년 공부 과정/분산 데이터베이스

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

환성 2023. 3. 12. 16:27
728x90

분산 파일시스템

  • 데이터가 단일 물리 머신의 저장 용량을 초과하게 되면, 전체 데이터셋 분리된 여러 머신에 나눠서 저장할 필요가 있다.

 

  • 네트워크로 연결된 여러 머신의 스토리지를 관리하는 파일시스템을 분산 파일시스템이라고 한다.

 

  • 분산 파일시스템은 네트워크 기반이므로 네트워크 프로그램의 복잡성을 모두 가지고 있다.

 

 

장점

 

1. 매우 큰 파일

  • 수백 메가, 기가, 테라뿐만 아니라 최근에는 페타바이트 크기의 데이터를 저장하는 하둡 클러스터도 등장

 

2. 스트리밍 방식의 데이터 접근

  • 가장 효율적인 데이터 접근 방식 -> 한 번 쓰고 여러 번 읽는 것

 

3. 범용 하드웨어

  • HDFS는 장애 발생 시 장애가 발생했다는 사실을 모르게 작업을 수행하도록 설계

 

단점

 

1. 빠른 데이터 응답 시간

  • HDFS는 높은 데이터 처리량을 제공하기 위해 최적화 되어 있고 응답 시간을 희생했다

 

2. 수많은 작은 파일

  • 저장할 수 있는 파일 수는 네임노드의 메모리 용량에 좌우된다. 블록은 각각 150바이트 정도의 메모리가 필요하고 만약 파일의 수가 백만 개면 각 파일의 블록이 하나면 적어도 300MB 메모리가 필요하다

 

3. 다중 라이터와 파일의 임의 수정

  • HDFS는 파일에서 임의 위치에 있는 내용을 수정하는 것은 허용하지 않고 다중 라이터도 지원하지 않는다

 

HDFS 개념

 

블록

 

  • 파일시스템의 블록이 수 킬로바이트, 디스크 블록은 512바이트인 반면 HDFS는 기본적으로 128MB의 큰 단위의 블록을 가지고 있다.

 

  • 블록 단위가 이렇게 큰 이유는 탐색 비용을 최소화하기 위해서이고 데이터를 전송하는 데 더 많은 시간을 할애하게 된다.

 

  • 여러 개의 블록으로 구성된 대용량 파일을 전송하는 시간은 디스크 전송 속도에 크게 영향을 받는다.

 

  • 다만 기존 시스템은 블록보다 작은 크기의 데이터가 들어와도 디스크를 정해진 블록 크기만큼 쓰는 반면 HDFS는 실제 데이터의 크기만큼만 디스크를 사용한다.

 

  • 내고장성과 가용성을 제공하는데 필요한 복제를 구현할 떄 매우 좋다

 

  • 하나의 머신에서 블록 접근이 불가능할 때 다른 머신에서 블록을 가져올 수 있다는 장점이 있다

 

 

HDFS에 블록 추상화를 도입하면서 얻게 된 이득

 

1. 파일 하나의 크기가 단일 디스크의 용량보다 더 커질 수 있다는 점

  • HDFS는 클러스터의 전체 디스크를 모두 채울 정도로 큰 파일 하나를 저장하는 것이 가능하다.

 

2. 블록 단위로 추상화를 하면 스토리지의 서브시스템을 단순하게 만들 수 있다는 점

  • 블록은 단지 저장된 데이터의 청크일 뿐이고 권한 정보와 같은 파일의 메타데이터는 블록과 함께 저장될 필요가 없으므로 별도의 시스템에서 다룰 수 있다

 

네임노드와 데이터노드

네임노드와 데이터노드의 관계

  • HDFS 클러스터는 두 종류의 노드로 구성이 되어있는데 네임 노드 데이터 노드로 구성되어 있다.
    • 동작 방식은 master-slave패턴으로 동작하고 master인 하나의 네임노드와 slave의 여러 개 데이터노드로 구성되어 있다.
    • HDFS 클라이언트는 사용자를 대신해서 네임노드와 데이터노드 사이의 연결을 맡는다. 추가로 POSIX와 유사한 파일시스템 인터페이스를 제공하기떄문에 사용자는 데이터노드에 관련된 함수를 몰라도 코드를 작성할 수 있다.

 

  • 네임노드는 파일시스템 트리와 트리에 포함된 모든 파일과 디렉터리에 대한 메타데이터를 유지한다.
    • 네임노드의 장애 복구 기능 
      • 파일 시스템의 메타 데이터를 보존하기 위해 파일 백업 기능
      • 보조 네임노드를 운영하는 것

 

  • 데이터 노드는 클라이언트나 네임노드의 요청이 있을 때 블록을 저장하고 탐색하며, 저장하고 있는 블록의 목록을 주기적으로 네임노드에 보고한다.

 

 

 

 

블록 캐싱

  • 블록 캐싱는 데이터노드의 메모리에 명시적으로 캐싱하는 것을 말한다

 

  • 기본적으로 블록은 하나의 데이터노드 메모리에만 캐싱되지만 파일 단위로도 가능하다

 

  • 사용자나 애플리케이션은 캐시 풀에 캐시 지시자를 추가하여 특정 파일을 캐싱하도록 명령 할 수 있다.

 

  • 캐시 풀은 캐시 권한이나 자원의 용도를 관리하는 관리 그룹의 역할을 맡는다.

 

캐시 풀?
-  캐시 항목의 논리적 저장소를 의미하며 항목 저장이나 찾기 같은 항목에 대한 모든 일반적인 작업을 수행한다.