ZooKeeper 입문
홈 페이지:http://zookeeper.apache.org/
ZooKeeper 는 Hadoop 의 정식 서브 프로젝트 로 대형 분포 식 시스템 에 대한 신뢰성 있 는 조율 시스템 으로 제공 하 는 기능 은 유지 보수, 이름 서비스, 분포 식 동기 화, 그룹 서비스 등 을 포함한다.ZooKeeper 의 목 표 는 복잡 하고 오류 가 발생 하기 쉬 운 관건 적 인 서 비 스 를 밀봉 하고 간단 하고 사용 하기 쉬 운 인터페이스 와 성능 이 효율 적 이 고 기능 이 안정 적 인 시스템 을 사용자 에 게 제공 하 는 것 이다.
ZooKeeper 코드 버 전에 서 는 분포 식 잠 금, 선거, 대기 열의 인 터 페 이 스 를 제공 합 니 다. 코드 는 zookeeper - x. x \ src \ recipes 에 있 습 니 다.그 중에서 분포 자물쇠 와 대열 은 자바 와 C 두 가지 버 전이 있 고 선 거 는 자바 버 전 만 있다.
ZooKeeper 는 클 러 스 터 로 복사 할 수 있 으 며, 클 러 스 터 간 에는 Zab (ZooKeeper Atomic Broadcast) 프로 토 콜 을 통 해 데이터 의 일치 성 을 유지 할 수 있 습 니 다.
원리:http://cailin.iteye.com/blog/2014486/
설치
1.1 전제
Java 실행 환경 설정 필요
1.2 다운로드
http://mirrors.cnnic.cn/apache/zookeeper
https://mirrors.cnnic.cn/apache/zookeeper/zookeeper-3.4.10/zookeeper-3.4.10.tar.gz
1.3 스트레스 해소
원 하 는 디 렉 터 리 에 압축 을 풀 면 됩 니 다.
1.4 설정
복사
conf/zoo_sample.cfg
파일 을 통 해 zoo. cfg 라 고 명명 한 다음 수정 할 수 있 습 니 다.예시
# ZooKeeper , tickTime 。
tickTime=2000
# leader
initLimit=10
# follower leader (tickTime )
syncLimit=5
#
dataDir=D:\\zookeeper\\data
#
dataLogDir=D:\\zookeeper\\log
#
clientPort=2181
1.5 운행
더 블 클릭
bin/zkServer.cmd
으로 ZooKeeper 시작 서버 를 시작 합 니 다.bin\zkCli.cmd -server 127.0.0.1:2181
클 라 이언 트 작업 을 시작 합 니 다.2 구조
ZooKeeper 의 핵심 은 간단 한 파일 시스템 과 유사 하 며 간단 한 조작 과 첨부 파일 의 추상 화 (예 를 들 어 znode 의 정렬 과 watch) 를 제공 합 니 다.
4 가지 노드 유형 이 있 습 니 다.
유형
설명 하 다.
지속 노드 (PERSISTENT)
노드 를 만 든 후에 삭제 작업 이 있 을 때 까지 이 노드 를 주동 적 으로 제거 합 니 다.
지속 순서 노드 (PERSISTENT SEQUENTIAL)
지속 화 노드, 모든 부모 노드 는 그의 첫 번 째 하위 노드 에 단조 로 운 증 가 를 유지 합 니 다.
임시 노드 (EPHEMERAL)
임시 노드 의 생명주기 와 클 라 이언 트 세 션 이 연결 되 어 있 습 니 다.즉, 클 라 이언 트 세 션 이 효력 을 잃 으 면 이 노드 는 자동 으로 삭 제 됩 니 다.
임시 순서 노드 (EPHEMERAL SEQUENTIAL)
임시 노드, 모든 부모 노드 는 그의 첫 번 째 하위 노드 에 단조 로 운 증 가 를 유지 하고 분포 식 잠 금 을 실현 할 수 있 습 니 다.
3 상용 명령
해당 jar 패 키 지 를 가 져 옵 니 다. Maven 을 사용 하여 jar 패 키 지 를 관리 합 니 다. 다음 설정 입 니 다.
3.4.10
0.10
org.apache.zookeeper
zookeeper
${zookeeper.version}
com.101tec
zkclient
${zkclient.version}
org.apache.zookeeper.ZooKeeper
의 사용import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooDefs.Ids;
import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.data.Stat;
public class ZooKeeperTest {
private static final String ZK_CONNECT_URL = "127.0.0.1:2181";
private static final int SESSION_TIMEOUT = 3000;
// Exception,
public static void main(String[] args) throws Exception {
ZooKeeper zooKeeper = new ZooKeeper(ZK_CONNECT_URL, SESSION_TIMEOUT, null);
//
zooKeeper.register(new ZkWatcher(zooKeeper, "/root"));
// root , “root data”, ,
zooKeeper.create("/root", "root data".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
// ,-1 ,
zooKeeper.setData("/root", "new data".getBytes(), -1);
//
Stat stat = new Stat();
System.out.println(new String(zooKeeper.getData("/root", false, stat)));
//
zooKeeper.create("/root/child", "child".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
// , ,
zooKeeper.delete("/root/child", -1);
zooKeeper.delete("/root", -1);
}
//
private static class ZkWatcher implements Watcher {
private ZooKeeper zooKeeper;
private String path;
public ZkWatcher(ZooKeeper zooKeeper, String path) {
this.zooKeeper = zooKeeper;
this.path = path;
}
@Override
public void process(WatchedEvent event) {
System.out.println("watcher:" + event.getType());
// Watcher , , ZkClient
try {
zooKeeper.exists(path, true);
} catch (KeeperException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
org.I0Itec.zkclient.ZkClient
의 사용import org.I0Itec.zkclient.IZkDataListener;
import org.I0Itec.zkclient.ZkClient;
import org.apache.zookeeper.CreateMode;
public class ZkClientTest {
private static final String ZK_CONNECT_URL = "127.0.0.1:2181";
private static final String PATH = "/zkclient";
public static void main(String[] args) {
ZkClient zkClient = new ZkClient(ZK_CONNECT_URL);
zkClient.subscribeDataChanges(PATH, new IZkDataListener() {
@Override
public void handleDataDeleted(String dataPath) throws Exception {
System.out.println("handleDataDeleted dataPath:" + dataPath);
}
@Override
public void handleDataChange(String dataPath, Object data) throws Exception {
System.out.println("handleDataChange dataPath:" + dataPath + " data:" + data);
}
});
//
zkClient.create(PATH, "Hello", CreateMode.PERSISTENT);
//
zkClient.writeData(PATH, "new");
//
System.out.println(zkClient.readData(PATH));
//
zkClient.create(PATH + "/child", "child", CreateMode.PERSISTENT);
//
System.out.println(zkClient.getChildren(PATH));
//
zkClient.delete(PATH + "/child");
zkClient.delete(PATH);
}
}
참고 자료
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.