解壓tar包

tar -xf apache-zookeeper-3.5.7-bin.tar.gz -C /opt/module/

- 給zookeeper改個名~~
mv apache-zookeeper-3.5.7-bin/ zookeeper-3.4.7
配置環境變數
sudo vim /etc/profile.d/my_env.sh
export ZOOKEEPER_HOME=/opt/module/zookeeper-3.4.7
export PATH=$PATH:$ZOOKEEPER_HOME/bin

- 重新讀取/etc/profile使剛配置的環境變數生效
source /etc/profile
修改組態檔
修改持久化資料存盤目錄,
- 拷貝原有的單機組態檔
cp $ZOOKEEPER_HOME/conf/zoo_sample.cfg $ZOOKEEPER_HOME/conf/zoo.cfg

- 修改zoo.cfg
vim zoo.cfg
將目錄修改為自己要存放zookeeper資料目錄(請與博主保持一致)
在組態檔末尾添加
server.32=hadoop32:2888:3888
server.33=hadoop33:2888:3888
server.34=hadoop34:2888:3888

32,33,34代表myid,集群模式下配置一個檔案myid,這個檔案在dataDir目錄下,這個檔案里面有一個資料就是server.后的值,Zookeeper啟動時讀取此檔案,拿到里面的資料與zoo.cfg里面的配置資訊比較從而判斷到底是哪個server,
等號后面是服務器ip,我們加了映射,不懂的請看博主大資料第一篇博客;2888服務器之間交換資訊的埠號(是follower與leader的通信埠);3888是執行選舉時通信的埠,
創建資料持久化目錄
創建目錄,并創建子目錄myid
[yuaf@hadoop32 conf]$ cd ..
[yuaf@hadoop32 zookeeper-3.4.7]$ mkdir zkData
[yuaf@hadoop32 zookeeper-3.4.7]$ cd zkData/
[yuaf@hadoop32 zkData]$ touch myid
[yuaf@hadoop32 zkData]$ chmod +x myid
[yuaf@hadoop32 zkData]$ vim myid

同步組態檔
- 同步zookeeper
xsync /opt/module/zookeeper-3.4.7/
然后修改myid的值與之設定的服務器編號一致
修改hadoop33 zookeeper 的 myid
修改hadoop34 zookeeper 的 myid


- 同步環境變數
sudo xsync /etc/profile.d/my_env.sh
- 重新讀取hadoop33,hadoop34 /etc/profile,使剛配置的環境變數生效
玩個小游戲,這個自己找
撰寫群起zookeeper腳本
按以下代碼執行,
cd $ZOOKEEPER_HOME/bin
touch zk.sh
chmod +x zk.sh
vim zk.sh
#!/bin/bash
if (( $#==0 )); then
echo No Args!;
exit;
fi
for host in hadoop32 hadoop33 hadoop34
do
echo "------------------------------ZooKeeper in $host----------------------------"
ssh $host "zkServer.sh $1" 2> /dev/null
done
測驗一下:
在根目錄下輸入:
zk.sh start
(思考:為什么腳本會在根目錄下運行)

ZooKeeper命令列
- 進入zookeeper的客戶端
zkCli.sh - 顯示所有操作命令
help - 查看當前節點包含的內容
ls / - 查看當前節點詳細資訊
ls2 / - 創建普通節點
create /abc “jiedian”
在根目錄下創建abc節點,且其內容為 jiedian - 獲取節點的值
get /abc
獲取abc節點的值 - 創建短暫節點
create -e /bcd “duanzanjiedain”
之所以稱之為短暫節點,是因為再次登錄zookeeper這個節點就會消失 - 創建帶序號的節點
create -s /def “wodaixuhao”
ZooKeeperAPI介面
- 創建maven
- 匯入庫依賴
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.8.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.zookeeper/zookeeper -->
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.5.7</version>
</dependency>
</dependencies>
- 創建日志檔案
需要在專案的src/main/resources目錄下,新建一個檔案,命名為“log4j.properties”,在檔案中填入,
log4j.rootLogger=INFO, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
log4j.appender.logfile=org.apache.log4j.FileAppender
log4j.appender.logfile.File=target/spring.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n
- 創建客戶端
請打開集群啟動zookeeper,自主測驗,
package com.yuaf.zookeepert;
import org.apache.zookeeper.*;
import org.apache.zookeeper.data.Stat;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.io.IOException;
import java.util.List;
public class ZKApiTest {
//2181zookeeper的客戶端埠號
private static String connectString =
"hadoop102:2181,hadoop103:2181,hadoop104:2181";
//會話超時時間
private static int sessionTimeout = 2000;
private ZooKeeper zkClient = null;
@Before
public void before() throws IOException {
zkClient = new ZooKeeper(connectString, sessionTimeout, new Watcher() {
@Override
public void process(WatchedEvent event) {
// 收到事件通知后的回呼函式(用戶的業務邏輯)
System.out.println(event.getType() + "--" + event.getPath());
// 再次啟動監聽
try {
zkClient.getChildren("/", true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
@After
public void after() throws InterruptedException {
zkClient.close();
}
//創建子節點
@Test
public void create() throws KeeperException, InterruptedException {
zkClient.create("/abddc",
"song".getBytes(),
ZooDefs.Ids.OPEN_ACL_UNSAFE,
CreateMode.PERSISTENT);
}
//獲取子節點并監聽節點變化
@Test
public void getChildren() throws KeeperException, InterruptedException {
List<String> childen = zkClient.getChildren("/", true);
childen.forEach(System.out::println);
Thread.sleep(Long.MAX_VALUE);
}
//判斷節點是否存在
@Test
public void exist() throws KeeperException, InterruptedException {
Stat stat = zkClient.exists("/ooo", true);
System.out.println(stat == null ? "not exist" : "exist");
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/44754.html
標籤:其他
