남는건 기록뿐

분산 파일 시스템 본문

Hadoop

분산 파일 시스템

루크안 2020. 6. 15. 10:06
반응형

분산 파일 시스템(Distributed File System)

--> 분산 파일 시스템은 서로 다른 컴퓨터들 사이에 네트워크를 통하여 파일을 공유할 수 있도록 하는 클라이언트 / 서버 기반의 어플리케이션이다.

 

분산 파일 시스템의 종류 및 구현 방식

 

GFS(Google File System)

: Google에 의해 자기 회사 사용 목적으로 개발된 분산 파일 시스템이다. 일반 상용 하드웨어를 이용하여 대량의 서버를 연결하여 데이터에 대한 접근이 효율적이고 안정적이다. 새로운 버전의 구글 파일 시스템 코드이름은 콜로서스(Colossus)이다.

GFS는 엄청나게 많은 데이터를 보유해야 하는 구글의 핵심 데이터 스토리지와 구글 검색 엔진을 위해 최적화 되었다. 파일들은 일반적인 파일 시스템에서의 클러스터들과 섹터들과 비슷하게 64MB로 고정된 크기의 청크들로 나뉜다. 이것들은 덮어쓰거나 크기를 줄이는 경우가 극히 드물며 보통 추가되거나 읽혀지기만 한다. 가격이 저렴한 범용 컴퓨터들로 구성되고 집적도가 높은 구글의 컴퓨팅 클러스터들에서 잘 동작하도록 최적화 되었다. 가격이 저렴한 서버에서도 사용되도록 설계되었기 때문에 하드웨어 안정성이나 자료들의 유실에 대해서 고려하여 설계되었고 latency(지연 시간)가 조금 길더라도 데이터의 높은 처리율에 중점을 두었다.

 

HDFS(Hadoop Distributed File System)

: HDFS는 GFS를 모델로 해서 만들어진 오픈소스다. 그렇기 때문에 HDFS는 GFS와 동일한 특징을 가진다. HDFS는 대용량의 파일을 청크(chunk)라는 단위로 분할해 데이터노드(Datanode)에 3개씩 분산 저장한다. 즉 하나의 파일이 분산된 여러 데이터노드에 저장되는 것이다. 하나의 파일에 대한 복제본이 3개씩 있고, 이 청크의 크기 단위는 보통 64MB다. 이 청크가 어느 데이터노드에 저장되었는지에 대한 메타데이터는 네임노드(Namenode)에 저장한다. 그리고 MapReduce 프레임워크를 이용해 분산 저장된 파일을 읽어 연산할 수 있도록 했다.

HDFS의 네임노드는 모든 파일의 네임스페이스와 메타데이터, 파일의 청크 정보를 관리한다. 청크는 데이터노드에 저장하고, 이 데이터노드가 클라이언트로부터 오는 파일 연산 요청을 처리한다. 앞에서 언급한 것과 같이, HDFS에서는 대용량 파일을 효과적으로 분산 저장할 수 있다. 그뿐만 아니라 청크 위치 정보를 기반으로 MapReduce 프레임워크를 이용해 연산마저 분산 처리할 수 있다. 하지만 HDFS에도 취약점이 있는데 많은 개수의 파일을 처리하기 적합하지 않다는 것이다. 왜냐하면 네임노드에 병목 현상이 발생하기 때문이다. 파일의 개수가 많아지면 네임노드의 서비스 데몬에 OOM(Out of Memory)이 발생하여 데몬 프로세스가 종료되는 문제가 생긴다.

 

HDFS의 특징은 다음과 같이 정리해 볼 수 있다.

  • 크기가 큰 파일이 청크 단위로 나뉘어 여러 데이터노드에 분산 복제 저장된다.
  • 청크 크기는 보통 64MB이고, 각각의 청크는 3개의 복제본이 존재하며, 서로 다른 데이터 노드에 청크가 저장된다.
  • 이 청크들에 대한 정보는 네임노드에 저장돼 있다.
  • 대용량의 파일을 저장하는 데 유리하며, 파일의 개수가 많으면 네임노드의 부담이 커진다.
  • 네임노드가 SPOF(Single Point Of Failure). 네임노드에 장애가 발생하면 운영 불가 상황이 발생하며 수동 복구 필요하다.

HDFS는 Java로 작성돼 있기 때문에 제공하는 인터페이스(API)도 Java API다. 그러나 JNI(Nava Native Interface)를 이용한 C API도 사용할 수 있다. Hadoop 커뮤니티는 공식적으로 FUSE를 이용한 마운트를 제공하고 있지는 않다. 그러나 서드 파티에서 HDFS에 대한 FUSE 마운트 기능을 제공하고 있다.

 

AFS(Andrew File System)

:

앤드류 파일 시스템은 네트워크로 연결된 파일 시스템의 자원을 효율적으로 공유할 수 있게 해 주는 분산 파일 시스템이다. 미국의 카네기 멜론 대학이 대학의 분산 환경에서 자원의 공유를 통하여 시스템을 효율적으로 관리하고 통합된 연구 교육 시스템을 구축하기 위해 개발한 것이다. 분산 환경에서의 탁월한 성능으로 인하여 전 세계 300개 이상의 대학, 연구소, 정부 기관과 산업체에서 사용하고 있으며, 자원 공유를 위한 효율적인 해결 방법으로 인정되고 있다. 주요 특징은 동일한 하나의 파일 공유 공간을 제공하고, 캐시에 의한 파일 사용 성능 향상과 파일 복제에 따른 높은 가용성 및 안정성, 높은 확장성, 보안 및 접근 제어 기능을 가지고 있다는 점이다.

 

GlusterFS(Gluster File System)

: Gluster 파일 시스템은 수천 PetaByte 용량에 수천 개의 Client host가 접속하여 사용 가능한 Scale-out 방식의 분산 파일 시스템이다. 기존의 분산형 파일 시스템과 비교하여, 간단한 Architecturer 구성, 안전성, 대용량 I/O 처리 성능, 응용 호환성 등이 우수하다. 

GlusterFS에는 Metadata 서버가 없다. 모든 파일들에 대한 Metadata 정보가 필요없기 때문이다. 단지 모든 서버들이 Gluster Storage Pool 에 어떤 서버들이 있고 이들을 사용한 어떤 볼륨들이 있는지만 알고 있을 뿐이다. 따라서, GlusterFS Cluster내의 어떤 서버에서도 현재 Mount 할 수 있는 볼륨의 정보를 얻을 수 있다. GlusterFS 서버들은 자체적으로 로컬 파일 시스템을 가지고 있다. GlusterFS에서 파일을 저장할 때 GlusterFS 서버의 로컬디스크에 지정된 폴더(Gluster에서는 이를 Brick이라고 한다)들에 클라이언트가 보낸 파일을 변경없이 그대로 분산(Distribute 방식)하여 저장한다. 예를 들어 파일이 10개를 3대의 GlusterFS 서버로 이루어진 볼륨의 Brick에 저장한다고 하면

3곳의 Brick에 Elastic Hash 알고리즘을 사용하여 분산 저장한다. 그리고 저장된 파일을 읽는 것은 그림과 같이 각 서버들의 로컬파일 시스템의 Brick으로 지정된 폴더에서 파일들을 읽어와 클라이언트에서 마운트시 지정한 자기 폴더를 통해 볼륨의 파일들을 보게 된다. 즉, 모든 파일들의 정보는 Glusterfs 클라이언트가 Volume을 Mount하면 그때 볼륨에 속한 Glusterfs 서버의 Brick으로 지정된 폴더에서 읽어와 한 폴더내에 일종의 가상으로 파일들을 보여준다. 따라서, 클라이언트도 Metadata 서버에 파일 정보를 물어볼 필요없이 자신이 마운트한 GlusterFS 볼륨의 정보만 알면 된다. 이런 정보는 볼륨에 포함된 GlusterFS 서버에 GlusterFS 클라이언트가 볼륨 마운트를 요청할때 받아오고 계속 그 그서버를 통해 정보를 유지한다.

 

 

반응형

'Hadoop' 카테고리의 다른 글

HDFS 설계(2)  (0) 2020.06.15
HDFS 설계(1)  (0) 2020.06.15
오브젝트 파일 시스템  (0) 2020.06.15
네트워크 파일 시스템  (0) 2020.06.15
Apache hadoop 설치  (0) 2020.06.15
Comments