본문 바로가기

Tech/Hadoop

[Hadoop]하둡 완벽가이드 요약 (3)

3장 요약


HDFS

장단점

  • 큰 사이즈의 파일을 저장한다
  • 데이터 처리 패턴은 한번 쓰고 여러번 읽는 것. 데이터 셋은 생성되거나 복사된다.
  • 데이터 접근에 빠른 응답 시간을 요구하는 어플리케이션은 적합하지 않다.
    • 빠른 응답을 원한다면 HBase를 대안으로 활용하면된다.
  • 한번쓰고 끝나거나, 덧붙이는 것은 가능하지만, 다중 라이터에 적합하지 않다.(하둡 3.0 부터는 지원)

요약

  • 기본적인 블록크기는 128MB이다.
  • 실질적으로 저장되는 데이터의 크기가 128MB이하라면, 해당 데이터의 사이즈만큼만 사용한다.
    • 기본 블록 크기가 128MB인 이유는?
      • 탐색 비용을 최소화
  • 보통 블럭을 여러 노드에 나누어 저장한다(replica).
  • 블럭이 손상되면, 다른 복사본이 있는 노드에서 복제하여 사용한다.
  • hdfs fsck / -files -block 커맨드를 통해 블록 관리 가능

NameNode, DataNode

  • 네임노드는 이하 마스터 노드라 한다. 데이터 노드는 이하 워커 노드라 한다.
  • 네임노드는 파일시스템의 네임스페이스를 관리한다.
    • 파일 시스템 트리와 그 트리에 포함된 모든 파일과 디렉터리에 대한 메타데이터를 유지한다.
    • 이 정보는 네임스페이스 이미지, 에디트 로그라 한다.
    • 로컬 디스크에 영구적으로 저장된다.
  • 블록 위치 정보는 저장하지 않는다.
    • 블록 위치정보는 시스템이 시작할 때 모든 데이터노드로부터 받아서 재구성하기 때문이다.
  • 데이터노드는 클라이언트나 네임노드의 요청이 있을 때, 블록을 저장하고 탐색.
    • 저장하고 있는 블록의 목록을 주기적으로 네임노드에게 전송한다.
  • 네임노드가 죽으면 파일시스템은 동작하지 않는다.
    • 데이터노드에 블록이 저장되어 있지만, 블록정보를 이용하여 재구성 할 수 없기 때문
  • 네임노드 장애 복구 방법
    • 파일시스템의 데이터를 영속적인 공간에 백업한다.(NFS)
    • 보조 네임노드를 운영한다.
      • 에딧로그가 커지지 않도록 주기적으로 네임스페이스 이미지를 에딧로그와 병합하여, 새로운 네임스페이스 이미지를 만든다.
      • 주 네임노드가 장애가 일어날 것을 대비하여, 네임스페이스 이미지 복제본을 저장하고 있는다.
  • 데이터노드는 디스크에 저장된 블록을 읽는다.
    • 자주 읽는 블록 파일은 블록 캐시라는 데이터노드의 메모리에서 캐싱할 수 있다.
  • 네임노드는 파일시스템의 모든 파일과 각 블록에 대한 참조 정보를 메모리에서 관리한다.
    • 메모리가 많이 소모된다? HDFS 페더레이션으로 해결한다.
  • HDFS 페더레이션은 각각의 네임노드가 파일시스템의 네임스페이스를 일부 나누어 관리하는 방식을 말한다.
    • 각 네임노드는 네임스페이스 볼륨과 블록 풀을 관리한다.

 

HDFS 클라이언트

  • 네임노드와 데이터노드 사이에서 통신하고 파일시스템에 접근한다.

HDFS 고가용성

  • 네임노드는 메타데이터와 블록 파일의 매핑정보를 보관하는 유일한 저장소이므로, 장애 발생시 맵리듀스를 포함한 클라이언트로부터 파일 읽기, 쓰기 동작이 불가능해진다.(SPOF)
  • 관리자는 주 네임노드의 모든 데이터를 복제본으로 가진 새로운 네임노드를 구동하고 데이터 노드들에게 새로운 네임노드를 사용하도록 설정하는 방법이 있다. 이때, 새로운 노드는 아래와 같은 동작을 수행한다.
    • 네임스페이스 이미지를 로드
    • 에딧로그 갱신
    • 전체 데이터노드에서 충분한 블록리포트를 받을때까지 다른 요청을 처리하지 못한다.
  • 위 문제들을 해결하기 위해 대기노드를 사용하여 HA를 구성한다.(active standby)
    • HA를 구성하기 위해서는 반드시 에딧로그를 공유하기 위한 공유 스토리지를 사용해야한다.
    • 데이터노드는 블록리포트를 주, 대기 네임노드에 전송해야한다.
    • 대기 네임노드는 보조네임노드의 역할을 수행해야한다,(주기적인 네임스페이스 병합작업)
  • 공유스토리지 종류로는 NFS, QJM이 있다.
    • QJM은 HDFS 전용 구현체. 고가용성 에딧로그를 지원하기 위한 목적으로 설계
    • 저널노드 그룹에서 동작한다. 각 에딧로그는 전체 저널노드에 동시에 쓰여진다.
  • 대기 네임노드를 쓰면 빨리 복구가 가능한이유
    • 최신의 에딧로그와 실시간로 갱신되는 블록 매핑 정보를 메모리에 유지하고 있기 때문
  • 주 네임노드에서 대기 네임노드로 전환되는 작업은 장애복구 컨트롤러가 수행한다.
    • 단 하나의 네임노드만 동작되는 것을 보장하기 위해 보통 주키퍼를 사용한다.

HDFS 명령어

  • hadoop fs -help

HDFS의 파일권한은 POSIX와 동일하다.

 

HTTP로 HDFS에 접근하는 방법

  • 네임노드와 데이터노드에 내장된 웹 서버 WebHDFS를 사용한다.
    • dfs.webhdfs.enable 속성을 true로 준다.
    • webhdfs로 http request가 오면, 네임노드에게 요청 연산을 전달하고, 스트리밍할 데이터 노드를 알려주는 response를 보낸다.
  • 프록시서버를 둔다.
반응형

'Tech > Hadoop' 카테고리의 다른 글

[Hadoop]하둡 완벽가이드 요약 (7)  (0) 2022.03.07
[Hadoop]하둡 완벽가이드 요약 (4)  (0) 2022.03.06
[Hadoop]하둡 완벽가이드 요약 (2)  (0) 2022.03.03
[Hadoop]하둡 완벽가이드 요약 (1)  (0) 2022.03.03
[Hadoop]hadoop (2)  (0) 2022.02.27