热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

zookeeperMac上IntellijIDEA配置zookeeper(3.5.8)源码阅读、运行、调试环境

近期需要整理MIT6.824中分布式系统协调服务zookeeper的一些知识,想要在Mac本地搭建一个可以方便运行调试的zookeeper环境,这玩意竟

近期需要整理MIT6.824 中 分布式系统协调服务 zookeeper 的一些知识,想要在Mac 本地搭建一个可以方便运行调试的zookeeper环境,这玩意竟然耗费了一上午的时间,实在是不可忍;当然,主要还是因为对Java的编译运行环境 以及 周边工具不太熟悉。

希望能够为后续想要学习的同学们节省更多的时间。

OS环境:MAC
zookeeper 版本:3.5.8 (更高版本 因为变更了编译配置,所以没有去搞)
java环境:15.0.1


文章目录

    • 1. 编译前基本环境准备
    • 2. 编译 及 导入 Intellij IDEA
    • 3. Zookeeper 运行环境配置


1. 编译前基本环境准备


  • 安装基本的java以及jdk
    运行java --version,显示如下:
    在这里插入图片描述
    表示java环境已经配置好了,不需要再进行java环境的配置。

    否则需要执行如下步骤:
    a. 安装java brew install java
    b. 安装jdk环境,通过https://www.oracle.com/java/technologies/javase-jdk15-downloads.html 下载mac操作系统的最新版本jdk,直接按照正常的软件安装方式安装即可。

  • 安装软件,这里还是用强大通用的intellij-idea即可
    brew cask intall intellij-idea ,可能需要搞一个破解的,这里就看大家各显神通了,淘宝、闲鱼啥的

  • 安装maven ,用来安装java的包依赖
    brew install mvnvm
    最后运行mvn --version,显示如下表示安装成功
    在这里插入图片描述

  • 通过mvn 安装idea的java依赖包
    mvn -e idea:idea
    或者 也可以通过 后面下载好的zookeeper代码中的pox.xml 导入到idea打开的zookeeper项目中
    在这里插入图片描述

  • 安装ant
    https://ant.apache.org/bindownload.cgi 下载最新的tar包,将解压好的目录中的bin文件可以添加到环境变量中export PATH=$PATH:/xxx/bin/。 大家都说这是一个巨古老的java编译方式,比较好奇zookeeper为什么还会一直用

  • zookeeper 3.5.8 源码准备

    git clone https://github.com/apache/zookeeper.git
    git checkout branch-3.5.8


2. 编译 及 导入 Intellij IDEA


  • 编译 zookeeper代码
    a. cd zookeeper
    b. ant eclipse

  • 导入Intellij IDEA
    打开zookeeper目录即可
    在这里插入图片描述

  • 项目的依赖配置,这里主要是指定一下jdk版本即可
    command + ;打开项目配置
    或者 File --> Project Structure
    在这里插入图片描述
    因为我们已经下载了最新版本的sdk,所以这里Add JDK之后会默认打开已经下载好的目录,直接Open即可

  • 配置zookeeper项目的依赖包
    找到zookeeper目录下的pox.xml文件,右键点击 进行Reimport
    在这里插入图片描述


3. Zookeeper 运行环境配置


  1. zoo.cfg 配置
    zookeeper服务运行的时候需要加载zoo.cfg 文件,这个文件默认是没有的,但是zoo_sample.cfg 文件存储在下载好的源码目录中:zookeeper/conf
    可以cp zoo_sample.cfg zoo.cfg,可以直接用默认的配置即可(测试也只是本地运行,非集群模式)

  2. zookeeper 的编译运行配置
    zk的运行需要通过主类 org.apache.zookeeper.server.ZooKeeperServerMain 启动
    在这里插入图片描述
    编辑 run configuration
    在这里插入图片描述
    在这里插入图片描述

  3. 将主类信息,zoo.cfg绝对路径,你的zookeeper主目录添加进去
    如下:
    在这里插入图片描述

  4. 运行
    在这里插入图片描述
    点击运行,Intellij IDEA会先编译,再运行zk server

    如果,编译过程中出现如下问题:
    a. SLF4J: Class path contains multiple SLF4J bindings. 同时这个错误下应该还会有两个冲突路径,大体原因是再初始化日志模块时发现zk依赖了两个日志类,java认为是有冲突的,我的做法是将其中的一个直接注掉(mv xx xx-bak),因为我的两个冲突日志类是一样的,之前执行mvn -e idea:idea的时候有一部分类导入了两次。

    或者更好的解决办法是 从项目的依赖中将另一个类的路径 标记为exclude中的一项。

    b. log4j:WARN No appenders could be found for logger 这个问题同样是日志问题,是找不到log4j的初始化配置,即同样存在于目录zookeeper/conf/log4j.properties文件。

    我的做法是直接将绝对路径设置到运行时的编译配置中。
    回到 Exit configuration command + option + r
    在这里插入图片描述
    添加路径:
    -Dlog4j.configuration=file:/Users/xxxxx/IdeaProjects/zookeeper/conf/log4j.propertiesVM options选项中即可
    在这里插入图片描述
    再次运行 即zk sever 已经正常启动,并输出日志:
    在这里插入图片描述

  5. 链接测试
    再用终端的zkCli.sh工具链接测试,能够与server通信,进入zk交互命令行成功

    cd /zookeeper/bin sh zkCli.sh
    ...
    2020-11-15 13:31:40,529 [myid:] - INFO [main:ClientCnxn@1653] - zookeeper.request.timeout value is 0. feature enabled=
    Welcome to ZooKeeper!
    2020-11-15 13:31:40,539 [myid:localhost:2181] - INFO [main-SendThread(localhost:2181):ClientCnxn$SendThread@1112] - Opening socket connection to server localhost/127.0.0.1:2181. Will not attempt to authenticate using SASL (unknown error)
    JLine support is enabled
    2020-11-15 13:31:40,554 [myid:localhost:2181] - INFO [main-SendThread(localhost:2181):ClientCnxn$SendThread@959] - Socket connection established, initiating session, client: /127.0.0.1:58600, server: localhost/127.0.0.1:2181
    2020-11-15 13:31:40,599 [myid:localhost:2181] - INFO [main-SendThread(localhost:2181):ClientCnxn$SendThread@1394] - Session establishment complete on server localhost/127.0.0.1:2181, sessionid = 0x10057c92b3d0000, negotiated timeout = 30000WATCHER::WatchedEvent state:SyncConnected type:None path:null
    [zk: localhost:2181(CONNECTED) 4] stat /
    cZxid = 0x0
    ctime = Thu Jan 01 08:00:00 CST 1970
    mZxid = 0x0
    mtime = Thu Jan 01 08:00:00 CST 1970
    pZxid = 0x0
    cversion = -1
    dataVersion = 0
    aclVersion = 0
    ephemeralOwner = 0x0
    dataLength = 0
    numChildren = 1


推荐阅读
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • 安装mysqlclient失败解决办法
    本文介绍了在MAC系统中,使用django使用mysql数据库报错的解决办法。通过源码安装mysqlclient或将mysql_config添加到系统环境变量中,可以解决安装mysqlclient失败的问题。同时,还介绍了查看mysql安装路径和使配置文件生效的方法。 ... [详细]
  • Final关键字的含义及用法详解
    本文详细介绍了Java中final关键字的含义和用法。final关键字可以修饰非抽象类、非抽象类成员方法和变量。final类不能被继承,final类中的方法默认是final的。final方法不能被子类的方法覆盖,但可以被继承。final成员变量表示常量,只能被赋值一次,赋值后值不再改变。文章还讨论了final类和final方法的应用场景,以及使用final方法的两个原因:锁定方法防止修改和提高执行效率。 ... [详细]
  • EPICS Archiver Appliance存储waveform记录的尝试及资源需求分析
    本文介绍了EPICS Archiver Appliance存储waveform记录的尝试过程,并分析了其所需的资源容量。通过解决错误提示和调整内存大小,成功存储了波形数据。然后,讨论了储存环逐束团信号的意义,以及通过记录多圈的束团信号进行参数分析的可能性。波形数据的存储需求巨大,每天需要近250G,一年需要90T。然而,储存环逐束团信号具有重要意义,可以揭示出每个束团的纵向振荡频率和模式。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • Windows 7 部署工具DISM学习(二)添加补丁的步骤详解
    本文详细介绍了在Windows 7系统中使用部署工具DISM添加补丁的步骤。首先需要将光驱中的安装文件复制到指定文件夹,并进行挂载。然后将需要的MSU补丁解压并集成到系统中。文章给出了具体的命令和操作步骤,帮助读者完成补丁的添加过程。 ... [详细]
  • 【shell】网络处理:判断IP是否在网段、两个ip是否同网段、IP地址范围、网段包含关系
    本文介绍了使用shell脚本判断IP是否在同一网段、判断IP地址是否在某个范围内、计算IP地址范围、判断网段之间的包含关系的方法和原理。通过对IP和掩码进行与计算,可以判断两个IP是否在同一网段。同时,还提供了一段用于验证IP地址的正则表达式和判断特殊IP地址的方法。 ... [详细]
  • CEPH LIO iSCSI Gateway及其使用参考文档
    本文介绍了CEPH LIO iSCSI Gateway以及使用该网关的参考文档,包括Ceph Block Device、CEPH ISCSI GATEWAY、USING AN ISCSI GATEWAY等。同时提供了多个参考链接,详细介绍了CEPH LIO iSCSI Gateway的配置和使用方法。 ... [详细]
  • 本文介绍了Java集合库的使用方法,包括如何方便地重复使用集合以及下溯造型的应用。通过使用集合库,可以方便地取用各种集合,并将其插入到自己的程序中。为了使集合能够重复使用,Java提供了一种通用类型,即Object类型。通过添加指向集合的对象句柄,可以实现对集合的重复使用。然而,由于集合只能容纳Object类型,当向集合中添加对象句柄时,会丢失其身份或标识信息。为了恢复其本来面貌,可以使用下溯造型。本文还介绍了Java 1.2集合库的特点和优势。 ... [详细]
  • 本文总结了初学者在使用dubbo设计架构过程中遇到的问题,并提供了相应的解决方法。问题包括传输字节流限制、分布式事务、序列化、多点部署、zk端口冲突、服务失败请求3次机制以及启动时检查。通过解决这些问题,初学者能够更好地理解和应用dubbo设计架构。 ... [详细]
  • 在IDEA中运行CAS服务器的配置方法
    本文介绍了在IDEA中运行CAS服务器的配置方法,包括下载CAS模板Overlay Template、解压并添加项目、配置tomcat、运行CAS服务器等步骤。通过本文的指导,读者可以轻松在IDEA中进行CAS服务器的运行和配置。 ... [详细]
  • 本文介绍了一种求解最小权匹配问题的方法,使用了拆点和KM算法。通过将机器拆成多个点,表示加工的顺序,然后使用KM算法求解最小权匹配,得到最优解。文章给出了具体的代码实现,并提供了一篇题解作为参考。 ... [详细]
  • 像跟踪分布式服务调用那样跟踪Go函数调用链 | Gopher Daily (2020.12.07) ʕ◔ϖ◔ʔ
    每日一谚:“Acacheisjustamemoryleakyouhaven’tmetyet.”—Mr.RogersGo技术专栏“改善Go语⾔编程质量的50个有效实践” ... [详细]
  • ZooKeeper 学习
    前言相信大家对ZooKeeper应该不算陌生。但是你真的了解ZooKeeper是个什么东西吗?如果别人面试官让你给他讲讲ZooKeeper是个什么东西, ... [详细]
author-avatar
吟伶逸慧喜靖
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有