2024年Java最全zookeeper开山篇-编译安装与zk基础命令使用,Java重点知识大全

1200页Java架构面试专题及答案

小编整理不易,对这份1200页Java架构面试专题及答案感兴趣劳烦帮忙转发/点赞

百度、字节、美团等大厂常见面试题

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

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

  1. <plugin>

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

  3. <artifactId>properties-maven-plugin</artifactId>

  4. <executions>

  5. <execution>

  6. <phase>initialize</phase>

  7. <goals>

  8. <goal>read-project-properties</goal>

  9. </goals>

  10. <configuration>

  11. <files>

  12. <file>${basedir}/src/main/resources/git.properties</file>

  13. </files>

  14. </configuration>

  15. </execution>

  16. </executions>

  17. </plugin>

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

  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>

并且我们也可以看到,这里需要这些参数的原因是为了配置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]

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

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

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

  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]

从报错信息可以得出,我们需要一个运行时传递的参数,但是没有配置,而这个参数就是我们启动服务的时候需要修改的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

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

ls 查看

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

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

  2. [zookeeper]

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

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

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

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

  2. Created/root

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

可以看到当我们获取/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

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

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

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

  2. []

最后

在面试前我整理归纳了一些面试学习资料,文中结合我的朋友同学面试美团滴滴这类大厂的资料及案例

MyBatis答案解析
由于篇幅限制,文档的详解资料太全面,细节内容太多,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!

大家看完有什么不懂的可以在下方留言讨论也可以关注。

觉得文章对你有帮助的话记得关注我点个赞支持一下!

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

[外链图片转存中…(img-n8rC6dkO-1714873007347)]
由于篇幅限制,文档的详解资料太全面,细节内容太多,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!

大家看完有什么不懂的可以在下方留言讨论也可以关注。

觉得文章对你有帮助的话记得关注我点个赞支持一下!

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

  • 29
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值