zookeeper开山篇-编译安装与zk基础命令使用

本文详细介绍了如何下载、配置ApacheZooKeeper源码,包括设置环境变量、Git克隆、Maven编译,以及处理遇到的问题如git.properties配置、log4j配置等,最后涵盖了一些常用命令行操作和节点管理。
摘要由CSDN通过智能技术生成

下载完成后,我们将其解压,开始配置环境变量,例如:

ANT_HOME=E:\apache-ant-1.10.5

并且我们需要在全局的path路径下添加一个**%ANT_HOME%\bin** ,配置完毕后,我们进入cmd窗口,执行如下命令:

C:\Users\Administrator>ant -version
Apache Ant™ version 1.10.7 compiled on September 1 2019

可以看到成功返回了ant的版本信息,代表此时配置已经成功

2.进入github进行下载,我们找到当前所有的branchs:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

找到我们需要版本的分支,进行git下载:

$ git clone -b branch-3.5.6 https://github.com/apache/zookeeper.git
Cloning into ‘zookeeper’…
remote: Enumerating objects: 1, done.
remote: Counting objects: 100% (1/1), done.
remote: Total 59332 (delta 0), reused 0 (delta 0), pack-reused 59331
Receiving objects: 100% (59332/59332), 113.97 MiB | 41.00 KiB/s, done.
Resolving deltas: 100% (38347/38347), done.

3.进入刚才下载的zk源码目录,启动cmd窗口,输入编译命令

G:\开发软件>cd zk-3.5.6
G:\开发软件\zk-3.5.6>cd apache-zookeeper-3.5.6
G:\开发软件\zk-3.5.6\apache-zookeeper-3.5.6>ant eclipse

然后等待最终编译成功输出,如果为 build successful字样则为成功

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

接下来,我们将代码导入开发工具(官方使用的是eclipse,这里我们使用ieda),

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

一路next,最后将maven编译完成,即可完成源码的编译,我们可以看到源码的目录如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

而加载完毕后,我们可以看到,zk3.5版本起,官方将模块分离出来了,多出了很多的子模块,比如文档说明相关在zookeeper-docs工程下,而zk的一些基础数据结构类定义相关则在zookeeper-jute工程下,而zk的客户端和服务端相关的代码则是分别在zookeeper-clientzookeeper-server工程下,而在server工程下我们可以找到两个启动类: ZooKeeperServerMain以及QuorumPeerMain,分别位于org.apache.zookeeper.serverorg.apache.zookeeper.server.quorum包下,其中单机版的zk使用ZooKeeperServerMain作为启动类,集群版的zk使用QuorumPeerMain启动类。现在我们尝试启动单机版的zk,运行ZooKeeperServerMain类,结果如下:

错误: 找不到或无法加载主类 org.apache.zookeeper.server.ZooKeeperServerMain

这是怎么回事呢?难道是jdk版本不对?但是我们查阅了官网,zk3.5.x版本对应的jdk的确是1.8,那么只有一种可能就是编译出来的class不是当前jdk编译的,我们这里选择将zookeeper-server的工程重新编译一下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

却看到compile的时候控制台报错了,如下:

[ERROR] Failed to execute goal org.codehaus.mojo:properties-maven-plugin:1.0.0:read-project-properties (default) on project zookeeper: Properties could not be loaded from File: D:\360安全浏览器下载\zk-3.5.6 - 副本\zookeeper-server\src\main\resources\git.properties -> [Help 1]

看报错的原因,似乎是有部分代码使用了resources\git.properties文件的配置,但是我们找了一下,在github上的代码中不会存在git.properties,那么是哪里出问题了呢?我们来到pom中找到了properties-maven-plugin插件,看到了如下的配置:

org.codehaus.mojo properties-maven-plugin initialize read-project-properties ${basedir}/src/main/resources/git.properties

原来是这里初始化的时候会加载该配置文件的内容,除此之外我们还注意到一个插件exec-maven-plugin,里面使用了部分参数在项目中并不存在,应该是引用了git.properties的配置参数导致了pom报错,并且初始化编译失败,如下:

org.codehaus.mojo exec-maven-plugin generate-version-info generate-sources exec ${project.basedir}/src/main/java/ java -classpath org.apache.zookeeper.version.util.VerGen ${project.version} ${git.commit.id} ${build.time}

并且我们也可以看到,这里需要这些参数的原因是为了配置VerGen的版本、时间等参数,查阅官方github才知道,VerGen仅仅是为了开发迭代的时候区分每个人的版本不重复冲突使用的,我们个人运行和查阅源码可以选择固定一个值,所以接下来我们来将properties-maven-plugin插件注释掉,并且将${git.commit.id}与

${build.time}两个参数改为自己的值,然后我们再次执行 mvn compile命令,此次编译成功!再次运行main方法,发现控制台出现了新的问题,输入如下:

log4j:WARN No appenders could be found for logger (org.apache.zookeeper.jmx.ManagedUtil).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
Usage: ZooKeeperServerMain configfile | port datadir [ticktime] [maxcnxns]

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

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

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

2020-01-07 01:28:48,727 [myid:] - ERROR [main:ZooKeeperServerMain@66] - Invalid arguments, exiting abnormally
java.lang.IllegalArgumentException: Invalid number of arguments:[]
at org.apache.zookeeper.server.ServerConfig.parse(ServerConfig.java:60)
at org.apache.zookeeper.server.ZooKeeperServerMain.initializeAndRun(ZooKeeperServerMain.java:103)
at org.apache.zookeeper.server.ZooKeeperServerMain.main(ZooKeeperServerMain.java:64)
2020-01-07 01:28:48,729 [myid:] - INFO [main:ZooKeeperServerMain@67] - Usage: ZooKeeperServerMain configfile | port datadir [ticktime] [maxcnxns]

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

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

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

cli常用命令

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

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

help

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

[zk: localhost:2181(CONNECTED) 0] help
ZooKeeper -server host:port cmd args
stat path [watch]
set path data [version]
ls path [watch]
delquota [-n|-b] path
ls2 path [watch]
setAcl path acl
setquota -n|-b val path
history
redo cmdno
printwatches on|off
delete path [version]
sync path
listquota path
rmr path
get path [watch]
create [-s] [-e] path data acl
addauth scheme auth
quit
getAcl path
close
connect host:port

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

ls 查看

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

[zk: localhost:2181(CONNECTED) 0] ls /
[zookeeper]

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

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

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

[zk: localhost:2181(CONNECTED) 2] create /root root
Created /root

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

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

[zk: localhost:2181(CONNECTED) 3] get /root
root
cZxid = 0x5
ctime = Wed Jan 01 22:30:10 CST 2020
mZxid = 0x5
mtime = Wed Jan 01 22:30:10 CST 2020
pZxid = 0x5
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 4
numChildren = 0

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

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

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

[zk: localhost:2181(CONNECTED) 4] stat /root update_root
cZxid = 0x5
ctime = Wed Jan 01 22:30:10 CST 2020
mZxid = 0x5
mtime = Wed Jan 01 22:30:10 CST 2020
pZxid = 0x5
cversion = 0
dataVersion = 0
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)

最后

代码真的是重质不重量,质量高的代码,是当前代码界提倡的,当然写出高质量的代码肯定需要一个相当高的专业素养,这需要在日常的代码书写中逐渐去吸收掌握,谁不是每天都在学习呀,目的还不是为了一个,为实现某个功能写出高质量的代码。

所以,长征路还长,大家还是好好地做个务实的程序员吧。

最后,小编这里有一系列Android提升学习资料,有兴趣的小伙伴们可以来看下哦~

《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门即可获取!

质不重量,质量高的代码,是当前代码界提倡的,当然写出高质量的代码肯定需要一个相当高的专业素养,这需要在日常的代码书写中逐渐去吸收掌握,谁不是每天都在学习呀,目的还不是为了一个,为实现某个功能写出高质量的代码。**

所以,长征路还长,大家还是好好地做个务实的程序员吧。

最后,小编这里有一系列Android提升学习资料,有兴趣的小伙伴们可以来看下哦~

《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门即可获取!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值