IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> zookeeper开山篇-编译安装与zk基础命令使用 -> 正文阅读

[大数据]zookeeper开山篇-编译安装与zk基础命令使用


1.  `<plugin>`

2.  `<groupId>org.codehaus.mojo</groupId>`

3.  `<artifactId>exec-maven-plugin</artifactId>`

4.  `<executions>`

5.  `<execution>`

6.  `<id>generate-version-info</id>`

7.  `<phase>generate-sources</phase>`

8.  `<goals>`

9.  `<goal>exec</goal>`

10.  `</goals>`

11.  `<configuration>`

12.  `<workingDirectory>${project.basedir}/src/main/java/</workingDirectory>`

13.  `<executable>java</executable>`

14.  `<arguments>`

15.  `<argument>-classpath</argument>`

16.  `<classpath  />`

17.  `<argument>org.apache.zookeeper.version.util.VerGen</argument>`

18.  `<argument>${project.version}</argument>`

19.  `<argument>${git.commit.id}</argument>`

20.  `<argument>${build.time}</argument>`

21.  `</arguments>`

22.  `</configuration>`

23.  `</execution>`

24.  `</executions>`

25.  `</plugin>`

26.  `<plugin>`

</pre>

并且我们也可以看到,这里需要这些参数的原因是为了配置VerGen的版本、时间等参数,查阅官方github才知道,VerGen仅仅是为了开发迭代的时候区分每个人的版本不重复冲突使用的,我们个人运行和查阅源码可以选择固定一个值,所以接下来我们来将properties-maven-plugin插件注释掉,并且将 g i t . c o m m i t . i d 与 {git.commit.id}与 git.commit.id{build.time}两个参数改为自己的值,然后我们再次执行?mvn compile命令,此次编译成功!再次运行main方法,发现控制台出现了新的问题,输入如下:


1.  `log4j:WARN No appenders could be found for logger (org.apache.zookeeper.jmx.ManagedUtil).`

2.  `log4j:WARN Please initialize the log4j system properly.`

3.  `log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.`

4.  `Usage: ZooKeeperServerMain configfile | port datadir [ticktime] [maxcnxns]`

</pre>

但是我们当前的启动类没有配置log4j,导致无法输出对应的日志信息,我们找到当前test包下的resources里面的log4j.properties文件,在当前启动类配置上对应的文件目录(vm options):


1.  `-Dlog4j.configuration=file:G:\开发软件\zookeeper-release-3.5.6\zookeeper-server\src\test\resources\log4j.properties`

</pre>

再次运行,发现启动报错了:


1.  `2020-01-0701:28:48,727[myid:] - ERROR [main:ZooKeeperServerMain@66] - Invalid arguments, exiting abnormally`

2.  `java.lang.IllegalArgumentException: Invalid number of arguments:[]`

3.  `at org.apache.zookeeper.server.ServerConfig.parse(ServerConfig.java:60)`

4.  `at org.apache.zookeeper.server.ZooKeeperServerMain.initializeAndRun(ZooKeeperServerMain.java:103)`

5.  `at org.apache.zookeeper.server.ZooKeeperServerMain.main(ZooKeeperServerMain.java:64)`

6.  `2020-01-0701:28:48,729[myid:] - INFO  [main:ZooKeeperServerMain@67] - Usage: ZooKeeperServerMain configfile | port datadir [ticktime] [maxcnxns]`

</pre>

从报错信息可以得出,我们需要一个运行时传递的参数,但是没有配置,而这个参数就是我们启动服务的时候需要修改的zoo.cfg文件,再次配置修改完毕(上面启动用的zoo.cfg)的文件,如下:

这时我们再次运行,即可成功启动zk的单机服务!

cli常用命令

zk服务端启动以后,我们来开始学习zk客户端命令,首先双击?zkCli.cmd,会默认进行本地的zk连接操作,如下:

help

我们先来看看zk有哪些命令操作,在cmd窗口中输入?help命令回车,即可查看到zk当前支持的所有的命令,如下:


1.  `[zk: localhost:2181(CONNECTED) 0] help`

2.  `ZooKeeper-server host:port cmd args`

3.  `stat path [watch]`

4.  `set path data [version]`

5.  `ls path [watch]`

6.  `delquota [-n|-b] path`

7.  `ls2 path [watch]`

8.  `setAcl path acl`

9.  `setquota -n|-b val path`

10.  `history`

11.  `redo cmdno`

12.  `printwatches on|off`

13.  `delete path [version]`

14.  `sync path`

15.  `listquota path`

16.  `rmr path`

17.  `get path [watch]`

18.  `create [-s] [-e] path data acl`

19.  `addauth scheme auth`

20.  `quit`

21.  `getAcl path`

22.  `close`

23.  `connect host:port`

</pre>

接下来我们来学习常见的一些命令操作。

ls 查看

如果我们想要查看当前的zk路径下存在哪些文件,这个时候就需要使用到?ls系列的命令了,语法为?ls path[watch],我们输入ls 以及对应的路径即可查看,如下:


1.  `[zk: localhost:2181(CONNECTED) 0] ls /`

2.  `[zookeeper]`

</pre>

由于这里我们没有创建节点,所以输出的结果为空

create -s -e path data acl 创建节点(-s:有顺序的节点 -e:临时的节点 acl:当前节点的权限)

我们知道zk里有节点的概念,用来存储数据,会绑定对应的路径,这里我们先来创建一个简单的节点:


1.  `[zk: localhost:2181(CONNECTED) 2] create /root root`

2.  `Created/root`

</pre>

get path [watch] 获取节点内容[可添加监听]

创建节点命令成功了,这里我们来通过get命令查看刚刚创建的节点吧,如下:


1.  `[zk: localhost:2181(CONNECTED) 3] get /root`

2.  `root`

3.  `cZxid = 0x5`

4.  `ctime = WedJan0122:30:10 CST 2020`

5.  `mZxid = 0x5`

6.  `mtime = WedJan0122:30:10 CST 2020`

7.  `pZxid = 0x5`

8.  `cversion = 0`

9.  `dataVersion = 0`

10.  `aclVersion = 0`

11.  `ephemeralOwner = 0x0`

12.  `dataLength = 4`

13.  `numChildren = 0`

</pre>

可以看到当我们获取/root节点的数据的时候,出现了一堆属性,比如cZxid、ctime等,那么这些属性是什么意思呢?别着急,暂时留下一个悬念,后面我们会针对这些属性进行详细的讲解。

stat path [watch] 节点更新[可添加监听]

如果我们需要给某一个节点的内容进行更新操作,可以使用?stat命令对某个节点进行更新,如下:

1.  `[zk: localhost:2181(CONNECTED) 4] stat /root update_root`

2.  `cZxid = 0x5`

3.  `ctime = WedJan0122:30:10 CST 2020`

4.  `mZxid = 0x5`

5.  `mtime = WedJan0122:30:10 CST 2020`

6.  `pZxid = 0x5`

7.  `cversion = 0`

8.  `dataVersion = 0`

9.  `aclVersion = 0`

10.  `ephemeralOwner = 0x0`

11.  `dataLength = 4`

12.  `numChildren = 0`

</pre>

ls2 path [watch] ls和stat的整合[可添加监听]

还记得上面的命令有?ls,可以查看当前路径下的节点,但是还有个ls2是干啥的呢?其实ls2命令则是将ls与stat操作进行合并,实现了一个命令查看当前节点下的其他节点并且修改当前节点内容的操作,如下:


1.  `[zk: localhost:2181(CONNECTED) 5] ls2 /root ls2_update_root`

2.  `[]`

3.  `cZxid = 0x5`

4.  `ctime = WedJan0122:30:10 CST 2020`

5.  `mZxid = 0x5`

6.  `mtime = WedJan0122:30:10 CST 2020`

7.  `pZxid = 0x5`

8.  `cversion = 0`

9.  `dataVersion = 0`

10.  `aclVersion = 0`

11.  `ephemeralOwner = 0x0`

12.  `dataLength = 4`

13.  `numChildren = 0`

</pre>

可以看到既返回了当前节点路径下的所有节点集合,这里因为没有创建子节点,所以返回了[],并且我们设置的新的节点内容也生效并且返回了。

delete path [version] 删除指定节点[可以指定版本号]

创建完节点以后,我们可以给对应路径的节点进行删除,并且需要注意的是,我们可以指定删除的版本号,即可以实现乐观锁更新,防止误操作,如下:


1.  `[zk: localhost:2181(CONNECTED) 1] get /root`

2.  `root`

3.  `cZxid = 0x5`

4.  `ctime = WedJan0122:30:10 CST 2020`

5.  `mZxid = 0x5`
有创建子节点,所以返回了[],并且我们设置的新的节点内容也生效并且返回了。

> delete path [version] 删除指定节点[可以指定版本号]

创建完节点以后,我们可以给对应路径的节点进行删除,并且需要注意的是,我们可以指定删除的版本号,即可以实现乐观锁更新,防止误操作,如下:
  1. [zk: localhost:2181(CONNECTED) 1] get /root

  2. root

  3. cZxid = 0x5

  4. ctime = WedJan0122:30:10 CST 2020

  5. mZxid = 0x5

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-08-10 13:29:13  更:2021-08-10 13:30:25 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/17 17:38:42-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码