ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Zookeeper Znode 알아보기
    Hadoop 2023. 12. 19. 04:44
    728x90
    반응형

    - 목차

     

    소개.

    Zookeeper 는 Znode 라는 데이터 저장기능이 존재합니다.
    Znode 는 데이터를 저장할 수 있는 논리적인 개념인데요.
    Hadoop NameNode 의 Namespace 와 같이 가상의 저장 개념입니다.
    Znode 는 파일시스템처럼 트리구조를 취하는데요.

    /hadoop-ha/hadoop-active
    /hadoop-ha/hadoop-standby
    /hadoop-ha/locks/operation1


    위와 같는 형식의 트리 구조를 이룹니다.
    그리고 각 트리의 노드에 해당하는 Znode 를 특정 데이터를 담을 수 있습니다.

    이번 글에서는 Znode 가 어떻게 데이터를 저장하는지에 대해서 자세히 알아보려고 합니다.


    Zookeeper Znode 구조.


    Znode 는 In-Memory 구조를 취합니다.
    Client 가 생성하는 Znode 데이터들은 모두 메모리에서 존재하기 됩니다.
    보통 메타데이터에 해당하는 작은 크기의 데이터들이 관리되기 때문에 큰 용량이 필요하지 않습니다.
    그리고 Disk 로의 저장이 즉각적으로 발생하지 않아 빠른 속도의 읽기/쓰기가 가능합니다.

    그리고 Znode 는 데이터의 Consistency 와 Persistency 를 구현하기 위해서 추가적인 구조를 갖습니다.
    하나가 Transaction Log(TxnLog) 그리고 Snapshot 입니다.
    Transaction Log 는 Write 요청에 대한 버퍼로써 동작합니다.
    MySQL 의 Redo Log 나 Hadoop NameNode 의 Edit Log 와 결이 비슷합니다.
    Zookeeper 로 전달되는 데이터 생성과 관련된 요청은 모두 Transaction Log 에 추가됩니다.
    그래서 Recovery 상황에서 Transaction Log 가 사용되며,
    In-Memory 구조의 한계를 극복합니다.
    또한 주기적으로 메모리의 상태를 디스크로 저장합니다.
    이렇게 저장되는 데이터를 snapshot 이라고 하며,
    Zookeeper 는 주기적으로 snapshot 을 생성합니다.


    Znode 종류.


    Znode 는 두가지 종류을 가집니다.
    Persistent Znode 와 Ephemeral Znode 입니다.
    Persistent Znode 는 지금까지 설명한 일반적인 Znode 입니다.
    트리 형식의 구조를 취하며, 메모리와 디스크에 데이터들이 저장됩니다.
    또한 snapshot 에 데이터가 영구히 저장되죠.
    반면, Ephemeral Znode 는 Znode 의 수명이 존재합니다.
    이 수명은 Session 이라고 불립니다.
    즉, Session 동안만 Ephemeral Znode 가 유지됩니다.

    그렇다면 Session 은 무엇일까요?
    Session 은 Client 와 Zookeeper 사이의 연결이 유지되는 기간입니다.
    그리고 Session 이 종료되는 조건은 Client 가 inactive 한 시간이 오래도록 유지되면 종료되게 됩니다.

     

    실습.

    Docker 를 활용하여 간단한 실습을 진행해보겠습니다.

    먼저 Zookeeper 를 실행합니다.

    docker run -d --name zookeeper \
    -e ZOO_SERVERS=server.1=zookeeper1:2888:3888 \
    -e ZOO_MY_ID=1 \
    -p 2181:2181 \
    wurstmeister/zookeeper:3.4.6

     

    Persistent ZNode 생성.

     

    먼저 아래 명령어를 통해서 zookeeper client 를 생성합니다.

    docker run -it \
    --link zookeeper:zookeeper \
    --name zookeeper-client wurstmeister/zookeeper:3.4.6 sh

     

    그리고 zookeeper-client Shell 창에서 아래의 명령어를 입력합니다.

    zhCli.sh 를 실행하여 zookeeper CLI 를 활성화시킵니다.

    /opt/zookeeper-3.4.6/bin/zkCli.sh -server zookeeper:2181

     

    ZNode 를 생성합니다.

    create /znode1 hello
    create /znode1/child hi

     

    생성된 ZNode 를 확인할 수 있습니다.

    get /znode1
    hello
    cZxid = 0x8
    ctime = Mon Dec 18 19:27:35 UTC 2023
    mZxid = 0x8
    mtime = Mon Dec 18 19:27:35 UTC 2023
    pZxid = 0x8
    cversion = 0
    dataVersion = 0
    aclVersion = 0
    ephemeralOwner = 0x0
    dataLength = 5
    numChildren = 0
    get /znode1/child

     

    hi
    cZxid = 0xb
    ctime = Mon Dec 18 19:28:42 UTC 2023
    mZxid = 0xb
    mtime = Mon Dec 18 19:28:42 UTC 2023
    pZxid = 0xb
    cversion = 0
    dataVersion = 0
    aclVersion = 0
    ephemeralOwner = 0x0
    dataLength = 2
    numChildren = 0

     

    zkCli 를 종료할 때에는 quit 명령어를 입력합니다.

    quit 을 하게되면 Session Closed 상태를 확인할 수 있습니다.

    quit
    Quitting...
    2023-12-18 19:30:11,362 [myid:] - INFO  [main:ZooKeeper@684] - Session: 0x18c7e5d5f590003 closed
    2023-12-18 19:30:11,362 [myid:] - INFO  [main-EventThread:ClientCnxn$EventThread@512] - EventThread shut down

     

    Ephemeral Znode 생성.

    Ephemeral ZNode 는 -e 옵션을 추가합니다.

     

    다시 zhCli.sh 를 활성화합니다.

    /opt/zookeeper-3.4.6/bin/zkCli.sh -server zookeeper:2181

     

     

    -e 옵션을 통해서 /znode2 를 생성합니다.

    create -e /znode2 "this_is_ephemeral"

     

    생성된 /znode2 를 확인합니다.

    get /znode2
    "this_is_ephemeral"
    cZxid = 0x11
    ctime = Mon Dec 18 19:36:14 UTC 2023
    mZxid = 0x12
    mtime = Mon Dec 18 19:38:11 UTC 2023
    pZxid = 0x11
    cversion = 0
    dataVersion = 1
    aclVersion = 0
    ephemeralOwner = 0x18c7e5d5f590004
    dataLength = 19
    numChildren = 0

     

    세션을 종료해보겠습니다.

    quit
    Quitting...
    2023-12-18 19:38:57,711 [myid:] - INFO  [main-EventThread:ClientCnxn$EventThread@512] - EventThread shut down
    2023-12-18 19:38:57,711 [myid:] - INFO  [main:ZooKeeper@684] - Session: 0x18c7e5d5f590004 closed

     

    그리고 Ephemeral znode 인 /znode2 는 세션과 함께 사라짐을 알 수 있습니다.

    get /znode2
    Node does not exist: /znode2

    반응형
Designed by Tistory.