-
Zookeeper Znode 알아보기Hadoop 2023. 12. 19. 04:44728x90반응형
- 목차
소개.
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
반응형'Hadoop' 카테고리의 다른 글
Zookeeper Ensemble 알아보기 (Leader Election, Sequential Znode) (0) 2023.12.19 Zookeeper Watch Mechanism 알아보기 (2) 2023.12.19 Hadoop File Permission 알아보기 (ACL) (0) 2023.12.15 Hadoop DataNode 알아보기 (0) 2023.12.12 Hadoop fsimage 알아보기 (0) 2023.12.11