데이터실무

DA, SQL, DB보안 등 실무자를 위한 위한 DB기술 바이블!

하둡 아키텍처

데이터 저장
분산파일시스템
하둡 아키텍처
작성자
admin
작성일
2021-02-15 13:40
조회
2710

[그림 Ⅱ-1-1]은 1.X 버전의 하둡 분산 파일 시스템의 기본 구조다. 앞서 설명한 네임 노드, 보조 네임 노드, 데이터 노드와 하둡 클라이언트가 어떤 식으로 동작하는지를 대략적으로 볼 수 있다.

[그림 Ⅱ-1-1] 하둡 분산 파일 시스템(HDFS) 구성도

[그림 Ⅱ-1-1] 하둡 분산 파일 시스템(HDFS) 구성도


하둡 분산 파일 시스템의 구성요소

하둡 분산 파일 시스템(HDFS)은 네임 노드(Namenode) 서버, 보조 네임 노드(Secondary Namenode)서버, 다수의 데이터 노드(Datanode) 서버 등으로 구성된다.
네임 노드는 파일 시스템의 아이 노드(iNode) 정보와 같은 네임스페이스 정보를 관리하면서 일반 파일 시스템의 수퍼 블록 역할을 담당한다. 그래서 모든 클라이언트는 네임 노드를 통해 파일 정보를 요청하게 된다. 그리고 보조 네임노드는 네임 노드에서 관리하고 있는 모든 정보를 파일 기반으로 백업하는 역할을 한다. 네임 노드 서버에 문제가 생기면, 보조 네임노드에서 관리하는 네임스페이스 정보를 이용해 파일 시스템을 복구할 수 있다. 단, 보조 네임노드가 네임 노드를 대신해 서비스를 제공할 수는 없다. 데이터 노드가 참조하고 있는 네임 노드의 네트워크 정보를 변경하거나 보조 네임노드의 네트워크 정보를 기존 네임 노드가 사용하던 정보로 변경하면, 보조 네임노드를 네임 노드로 이용할 수 있다. 데이터 노드는 실제 데이터 입출력 요청을 처리하는 역할을 담당한다. 하나의 파일이 여러개의 블록으로 나눠져 각 데이터 노드에 저장되는데, 데이터 노드는 이러한 블록을 파일 단위로 저장하고 클라이언트 요청에 따라 블록의 입출력을 처리한다.


네임 노드

네임 노드는 하둡을 이루는 가장 기본적이고 필수적인 일종의 데몬 소프트웨어라고 할 수 있다. 이는 데이터 노드와 함께 파일을 분산 저장하고, HDFS 마스터/슬레이브 구조에서 마스터노드의 역할을 한다. 네임 노드는 파일시스템의 디렉터리, 파일명, 파일블록 등 네임 스페이스를 관리하는 일종의 마스터 역할을 하며, 슬레이브에 해당하는 데이터 노드에게 입출력에 관련된 작업을 지시한다.
다시 말하면 네임 노드는 파일이 어떤 형태의 블록 단위로 나누어져 있는지, 어느 노드에 필요한 블록이 있는지, 시스템 전반에 대한 상태 등을 모니터링한다. 일종의 메타 정보 또는 인덱스 정보를 갖고 있는 것으로 보아도 무방할 것이다. 또한 네임 노드는 주로 시스템 메모리와 기타 입출력에 관한 지시를 한다. 이러한 이유 때문에 네임 노드는 일반적으로 데이터를 저장하거나 기타 애플리케이션을 실행하는 작업은 수행하지 않는다.
이렇게 중요한 역할을 수행하는 네임 노드는 하둡 1.X버전에서는 데이터 노드처럼 이중화 구성이 되지 않아 장애가 발생하였을 경우에는 치명적인 문제가 발생할 수 있다. 일부 서브 스크립션 형태의 하둡을 공급하는 특정 벤더에서는 이를 이중화하거나 특별한 기능을 통해 해결하기도 한다. 하지만 아파치 하둡 2.X버전부터는 이를 이중화하는 기능을 제공하고 있기 때문에 하둡 프로젝트를 기획중이라면 2.X대 사용을 고려하면 좋을 것이다.

[그림 Ⅱ-1-2] HDFS의 블록 복제

[그림 Ⅱ-1-2] HDFS의 블록 복제

[그림 Ⅱ-1-2] 는 HDFS에서 네임 노드와 데이터 노드의 관계를 정리한 것으로 네임 노드 안에는 앞에서 언급한 것과 같이 일종의 메타 정보들이 보관된다. 이 메타 정보를 통해 데이터 노드에 존재하는 각종 정보를 신속하게 찾을 수 있을 것이다.


데이터 노드

데이터 노드는 파일에 대한 실질적인 데이터 입출력에 대한 처리를 수행한다. 이에 대한 구체적인 설명은 다음과 같다. 다양한 소스에서 발생하는 각종 데이터를 실시간 또는 주기적으로 파일 시스템에 저장할 경우 먼저 이를 지정된 블록 단위로 쪼개고 데이터 노드에 분산ㆍ저장ㆍ처리하게 된다. 이때 네임 노드는 HDFS상의 각 블록이 어느 데이터 노드에 존재를 하는지를 사용자에 알려 준다. 동일한 파일을 여러 개의 블록으로 나누어 저장하게 되는데 통상적으로 3벌로 복제를 한다. [그림 Ⅱ-1-2]에는 이러한 데이터 노드 상에서 데이터의 복제가 3벌의 사본으로 이뤄지는 것을 이해하기 쉽게 도식화한 것이다. 이렇게 분산 저장하는 이유는 예기치 못하게 발생할 수 있는 데이터의 유실을 방지하기 위한 대책이기도 하다.
[그림 Ⅱ-1-2]는 네임 노드와 데이터 노드를 각각 표현한 것으로 네임 노드는 두 개의 데이터 파일을 가지고 있다. 두 개의 데이터 파일은 /user/sameerp/data/part-0과 /user/sameerp/data/part-1에 각각 존재한다. part-0은 일반적인 복제 형식에 따라 3벌의 블록으로 구성돼 있고, 각 블록은 차례대로 1과 3으로 돼 있다. 물론 파일의 내용은 각각 데이터 노드에 분산ㆍ저장돼 있을 것이다. 이는 앞에서 설명한 바와 같이 데이터 노드의 데이터가 유실되거나 손실되었더라도 읽을 수 있도록 하기 위함이다. 이러한 정보들은 지속적으로 네임 노드에 전송되고 최신의 정보들로 채워진다.


보조 네임 노드

보조 네임 노드(Secondary Name Node)는 클러스터로 구성된 HDFS의 상태를 모니터링하는 보조 기능을 하는 일종의 데몬 소프트웨어이며, 보조 네임 노드란 이름이 의미하는 바와 같이 네임 노드의 역할을 수행하지는 않는다. 정의된 값에 따라 주기적으로 네임 노드의 파일 시스템 이미지를 스냅샷해 생성하는 기능을 수행한다. 또한 보조 네임 노드는 네임 노드 복구 시 데이터의 손실에 따른 장애를 최소화하는 기능을 하기 때문에 보조 네임 노드를 체크 포인팅 서버라고도 부른다.


잡트레커

잡트레커(Job Tracker)는 클러스터 사용자가 애플리케이션등에서 실행되는 각종 잡을 관리하는 기능을 수행한다. 다시 말하면 잡트레커는 사용자의 명령을 받아서 데이터를 분석하기 위한 잡 생성기능을 한다. 하둡 클러스터에는 하나의 잡트레커 데몬만 존재하며 이것은 마스터 노드에서 실행하며 맵리듀스의 전체적인 실행을 감독하게 된다.


태스크트레커

태스크트레커(Task Tracker)는 잡트레커에서 생성된 잡을 태스크트레커에서 보내어 이를 처리하게 된다. 태스크트레커는 로컬 파일등을 이용해 데이터를 분석하는 과정에서 데이터 노드의 데이터를 이용하게 된다. 이 과정에서 데이터 노드에는 하나의 태스크트레커만 존재를 하게 되며 여러 개의 JVM을 생성해 다수의 맵리듀스를 수행하게 된다.

이상 5가지로 하둡의 중요 요소 및 상호 연관성 등에 대해 알아보았다. 하둡은 빅데이터를 처리하기 위한 기반 플랫폼으로서 각각의 업무 및 데이터의 성격에 따라서 적당한 에코시스템을 선정해 이를 유기적으로 조합하는 능력을 필요로 한다. 이러한 능력은 다양한 관점에서 적용하는 경험을 토대로 쌓인다.


하둡 분산 파일시스템의 동작 순서

하둡 분산 파일 시스템 동작 순서를 살펴보면 다음과 같다.


  1. ① 하둡 클라이언트가 네임 노드에 파일 생성을 요청한다.
  2. ② 네임 노드는 클라이언트가 요청한 파일 정보에서 해당 경로에 대한 파일 정보를 메모리에 생성하고 락을 생성한다.
  3. ③ 네임 노드는 다시 파일 내용을 저장할 데이터 노드를 선택해 데이터 노드 호스트 정보를 클라이언트에 전송한다. 이 때, 데이터 노드 호스트 수는 하둡 설정 파일에 설정된 복제본 수 또는 하둡 클라이언트에서 추가 설정한 복제본 수다.
  4. ④ 하둡 클라이언트는 데이터 노드 호스트 정보 가운데 첫 번째 정보를 이용해 데이터 노드로 데이터를 전송한다. 전송되는 데이터는 데이터 노드 호스트 목록과 파일 데이터다.
  5. ⑤ 데이터를 전송받은 첫 번째 데이터 노드는 파일 데이터를 로컬 디스크에 저장한 다음, 이를 두번째 데이터 노드로 전송한다. 이런 식으로 파일 데이터는 네임 노드에서 보내준 모든 데이터 노드에 파일 데이터 복제본을 저장한다.
  6. ⑥ 만약 파일 데이터 크기가 설정한 블록 크기보다 크면, 하둡 클라이언트는 네임 노드에 다음 블록을 저장할 데이터 노드 정보를 요청한다.
  7. ⑦ 파일 데이터가 데이터 노드에 모두 저장되면, 네임 노드는 ②번에서 생성한 파일 정보를 파일에 저장하고 락을 제거한다.
  8. ⑧ 네임 노드는 파일로 저장된 네임스페이스 정보를 보조 네임 노드로 전송한다. 네임스페이스 정보는 네임 노드를 복원할 때 사용할 수 있다.

위의 경우 파일 데이터가 첫 번째 데이터 노드에 전송되면, 하둡 클라이언트는 파일 전송이 완료된다.복제본 수를 늘려도 동일한 결과일 것이다.

다음은 하둡의 기본 설정 파일인 hdfs-default.xml을 보여준다. 최소 복제본 전송 수를 복제본 수와 동일하게 하면, 하둡 클라이언트는 복제본이 모두 정상적으로 전송된 다음 파일 전송을 완료할 것이다. 파일에 대한 안정성은 확보할 수 있지만 속도는 복제본 수만큼 떨어진다. 하둡 설정 파일의 각 요소를 정확히 알고, 하둡 분산 파일 시스템을 구축해야 요구 사항을 충족하는 서비스가 될 것이다.


$HADOOP_HOME/src/hdfs/hdfs-default.xml

<property><name>dfs.replication.min</name><value>1</value><description>Minimal block replication.</description></property>