上篇博文介紹了hadoop的安裝,這篇接着是zookeeper(3.4.6)的安裝。
4.1、修改zookeeper配置檔案zoo.cfg
在centos系統下解壓zookeeper安裝包zookeeper-3.4.6.tar.gz ,進入到conf目錄,将zoo_sample.cfg拷貝一份命名為zoo.cfg(Zookeeper 在啟動時會找這個檔案作為預設配置檔案):
[[email protected] conf] cp zoo_sample.cfg zoo.cfg
對zoo.cfg配置如下:
tickTime=2000 (基本事件單元,以毫秒為機關。它用來訓示心跳,最小的 session 過期時間為兩倍的 tickTime.)
dataDir=/usr/new/zookeeper (dataDir :存儲記憶體中資料庫快照的位置,如果不設定參數,更新事務日志将被存儲到預設位置。)
dataLogDir=/usr/new/zookeeper/logs #日志存放目錄,手動存在
server.0=172.31.62.52:2888:3888
server.1=172.31.62.53:2888:3888
server.2=172.31.62.54:2888:3888
clientPort=2181 (clientPort :監聽用戶端連接配接的端口)
其中,2888端口号是服務之間通信的端口,而3888是zookeeper與其他應用程式通信的端口.zookeeper是在hosts中映射了本機的IP.server.A=B:C:D:其中A是一個數字(設定需要從0開始,因為機器重新開機預設從0開始),表示這個是第幾号伺服器;B是這個伺服器的ip位址;C表示的是這個伺服器與叢集中的Leader伺服器交換資訊的端口;D表示的是萬一叢集中的Leader伺服器挂了,需要一個端口來重新進行選舉,選出一個新的Leader,而這個端口就是用來執行選舉時伺服器互相通信的端口。
4.2、建立目錄、建立并編輯myid檔案
(本次配置myid檔案放在/usr/zookeeper下)
vim/usr/zookeeper/data/myid
注意myid檔案中的内容為:Slave1中為0,Slave2中為1,Slave3為2,分别與zoo.cfg中對應起來。
注:在建立過程中曾使用“echo“1”>myid.txt”的方式建立檔案,運作zookeeper時會一直顯示”myid file is missing”,應該使用“touch myid”指令建立。這麼低級的錯誤......
4.3、同步安裝包
将解壓修改後的zookeeper檔案夾分别拷貝到Master、Slave1、Slave2的相同zookeeper安裝路徑下。注意:1.zookeeper-3.4.6的權限問題(chown -R hadoop:hadoop zookeeper),有可能更改後仍報權限問題,進到檔案夾中,可能會有新生成的log權限仍為root,改之。2.myid檔案的内容不是一樣的,各伺服器中分别對應zoo.cfg中的設定。
4.4、啟動zookeeper
Zookeeper的啟動與hadoop不一樣,需要每個節點都執行,分别進入3個節點的zookeeper目錄,啟動zookeeper:
bin/zkServer.sh start
若配置了”/etc/profile”,将zookeeper路徑添加進去,則可直接在目錄下執行”zkServer.sh start”在另兩台伺服器中執行相同操作。
4.5、檢查zookeeper是否配置成功
待3台伺服器均啟動後,如果過程正确的話zookeeper應該已經自動選好leader,進入每台伺服器的zookeeper目錄,執行以下操作檢視zookeeper啟動狀态:
bin/zkServer.sh status
如果出現以下代碼表示安裝成功了。
4.6、啟動用戶端腳本:zookeeper-3.4.3/bin/zkCli.sh -server zookeeper:2181
4.7、停止zookeeper程序:zookeeper-3.4.3/bin/zkServer.sh stop
注:
1.檢視2181端口占用情況:lsof -i:2181.
2.強行停止zookeeper:
1)jps 檢視QuorumPeerMain對應的程序id.
2)kill -9 ID.
3)[[email protected] ~] cd /tmp ,删除hsperfdata_hadoop中對應的檔案。
清淨了。
3.不知為何偶爾會出現log不在指定目錄的情況,在清zookeeper殘留記錄時要删除相應的/version-2檔案夾和日志,日志“zookeeper.out”查找指令:
[[email protected] ~] find / -name "zookeeper.out"