zookeeper -- Mac 上 Intellij IDEA 配置 zookeeper(3.5.8) 源码阅读、运行、调试环境
近期需要整理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. 安裝javabrew 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 運行環境配置
-
zoo.cfg 配置
zookeeper服務運行的時候需要加載zoo.cfg 文件,這個文件默認是沒有的,但是zoo_sample.cfg文件存儲在下載好的源碼目錄中:zookeeper/conf
可以cp zoo_sample.cfg zoo.cfg,可以直接用默認的配置即可(測試也只是本地運行,非集群模式) -
zookeeper 的編譯運行配置
zk的運行需要通過主類org.apache.zookeeper.server.ZooKeeperServerMain啟動
編輯 run configuration
-
將主類信息,zoo.cfg絕對路徑,你的zookeeper主目錄添加進去
如下:
-
運行
點擊運行,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 configurationcommand + option + r
添加路徑:
-Dlog4j.configuration=file:/Users/xxxxx/IdeaProjects/zookeeper/conf/log4j.properties到VM options選項中即可
再次運行 即zk sever 已經正常啟動,并輸出日志:
-
鏈接測試
再用終端的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
總結
以上是生活随笔為你收集整理的zookeeper -- Mac 上 Intellij IDEA 配置 zookeeper(3.5.8) 源码阅读、运行、调试环境的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 永劫无间百步穿杨成就怎么达成?
- 下一篇: Go 分布式学习利器(5)-- 数组和切