HDFS 설계



HDFS는 Hadoop Distributed FileSystem(하둡 분산 파일시스템)의 약어다.



1. HDFS 설계


HDFS는 범용 하드웨어로 구성된 클러스터에서 실행되고 스트리밍 방식의 데이터 접근 패턴으로 대용량 파일을 다룰 수 있도록 설계된 파일시스템이다.


  • 매우 큰 파일

    '매우 큰'의 의미는 수백 메가바이트, 기가바이트 또는 테라바이트 크기의 파일을 의미한다. 최근에는 페타바이트 크기의 데이터를 저장하는 하둡 클러스터도 있다.

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

    HDFS는 ‘가장 효율적인 데이터 처리 패턴은 한 번 쓰고 여러 번 읽는 것’ 이라는 아이디어에서 출발했다. 데이터셋은 생성되거나 원본으로부터 복사된다. 그리고 시간이 흐르면서 다양한 분석을 수행할 수 있다. 분석이 전부는 아니지만 첫 번째 레코드를 읽는 데 걸리는 지연시간보다 전체 데이터셋을 모두 읽을 때 걸리는 시간이 더 중요한다.

  • 범용 하드웨어

    하둡은 고가의 신뢰도 높은 하드웨어만을 고집하지는 않는다. 하둡은 노드 장애가 발생할 확률이 높은 범용 하드웨어(여러 업체에서 제공하는 쉽게 구할 수 있는 하드웨어)로 구성된 대형 클러스터에서 문제없이 실행되도록 설계되었다.HDFS는 이러한 장애가 발생하더라도 사용자가 장애가 발생했다는 사실조차 모르게 작업을 수행하도록 설계되었다.


HDFS가 적합하지 않은 응용 분야를 조사하는 것 역시 가치 있는 일이다. 나중에는 변할지 모르지만 현재 HDFS가 잘 맞지 않는 응용 분야는 다음과 같다.


  • 빠른 데이터 응답 시간

    데이터 접근에 수십 밀리초 수준의 빠른 응답 시간을 요구하는 어플리케이션은 HDFS와 맞지 않다. HDFS는 높은 데이터 처리량을 제공하기 위해 최적화되어 있고 이를 위해 응답 시간을 희생했다. 빠른 응답 시간을 원한다면 현재로서는 HBase가 하나의 대안이 될 수 있다.

  • 수 많은 작은 파일

    네임노드는 파일시스템의 메타데이터를 메모리에서 관리하기 때문에 저장할 수 있는 파일 수는 네임노드의 메모리 용량에 좌우된다. 경험상으로 파일, 디렉터리, 블록은 각각 150바이트 정도의 메모리가 필요하다. 따라서 파일 수가 백만 개고 각 파일의 블록이 하나면 적어도 300MB 메모리가 필요하다. 물론 수백만 개의 파일은 괜찮겠지만 수십억 개의 파일은 하드웨어 용량을 넘어서게 된다.

  • 다중 Writer와 파일의 임의 수정

    HDFS는 단일 라이터로 파일을 쓴다. 한 번 쓰고 끝나거나 파일의 끝에 덧붙이는 것은 가능하지만 파일에서 임의 위치에 있는 내용을 수정하는 것은 허용하지 않으며 다중 라이터도 지원하지 않는다.(하둡 3.0 부터는 다중 Writer를 지원한다.)


Hadoop 3.0 이 되며 바뀐 것들에 대한 기술 : url