目錄 1html
1. 前言 1java
2. 約定 1apache
3. 安裝步驟 2bash
3.2. 設置myid 2session
3.5. 修改conf/log4j.properties 3分佈式
介紹ZooKeeper-3.4.6版本的分佈式安裝,力求細緻,提供精確的安裝指導。本文的安裝環境是64位的SuSE 10.1 Linux,也適用於ZooKeeper-3.4.8。
ZooKeeper節點間不須要互登陸,所以不用配置免密碼登陸。
將ZooKeeper安裝在/data/hadoop/zookeeper目錄,其中/data/hadoop/zookeeper是指向/data/hadoop/zookeeper-3.4.6的軟連接。
ZooKeeper的數據目錄設置爲/data/hadoop/zookeeper/data。
本文使用了3臺機器部署ZooKeeper集羣,IP和主機名對應關係以下:
IP |
主機名 |
10.12.154.77 |
DEVNET-154-77 |
10.12.154.78 |
DEVNET-154-70 |
10.12.154.79 |
DEVNET-154-79 |
Zookeeper機器間不須要設置免密碼登陸,其它hadoop也能夠不設置,只要不使用hadoop-daemons.sh來啓動、中止進程,注意不是hadoop-daemon.sh,而是帶「s」的那個,帶「s」的會讀取hadoop的salves文件,遠程ssh啓動DataNode和備NameNode等。
將3臺機器的IP和主機名映射關係,在3臺機器上都配置一下,亦即在3臺機器的/etc/hosts文件中,均增長如下內容(能夠先配置好一臺,而後經過scp等命令複製到其它機器上,注意主機名不能包含任何下劃線):
10.12.154.77 DEVNET-154-77 10.12.154.78 DEVNET-154-70 10.12.154.79 DEVNET-154-79 |
在dataDir指定的數據目錄(/data/hadoop/zookeeper/data)下,建立文件myid,文件內容爲一個正整數值,用來惟一標識當前機器,所以不一樣機器的數值不能相同,建議從1開始遞增標識,以方便記憶和管理。本文約定以下:
IP |
標識數值(取值範圍爲1~255) |
10.12.154.77 |
1 |
10.12.154.78 |
2 |
10.12.154.79 |
3 |
可使用echo命令直接寫進去,如:
echo 1 > myid或echo 1 > /data/hadoop/zookeeper/data/myid |
按下述內容,修改ZooKeeper配置文件(3臺機器都須要,能夠先配置好一臺,而後經過scp等命令複製到其它機器上):
tickTime=2000 dataDir=/data/hadoop/zookeeper/data dataLogDir=/data/hadoop/zookeeper/datalog clientPort=2181 initLimit=5 syncLimit=2 autopurge.snapRetainCount=10 autopurge.purgeInterval=1 server.1=DEVNET-154-77:2888:3888 server.2=DEVNET-154-78:2888:3888 server.3=DEVNET-154-79:2888:3888 |
server.N中的N值必須和myid保持相同。
以上內容的配置,參照了ZooKeeper的官方文檔:zookeeperStarted.html。server.X用來配置ZooKeeper集羣中的各節點,並建議X的值和myid保持一致。
端口2181用於監聽客戶端的鏈接,端口2888用於Leader監聽Follower的鏈接,而3888則用於Leader選舉。
dataDir用來指定快照文件存放目錄,dataLogDir用來指定事務日誌文件存放目錄。若是隻指定了dataDir,而沒指定dataLogDir,則事務日誌文件也存放於dataDir指定的目錄。
默認,autopurge的兩個參數是被註釋的。
「autopurge.purgeInterval」指定自動清理快照文件和事務日誌文件的時間,單位爲小時,默認爲0表示不自動清理,這個時候可使用腳本zkCleanup.sh手動清理。不清理的結果是佔用的磁盤空間愈來愈大。
「autopurge.snapRetainCount」用於指定保留快照文件和事務日誌文件的個數,默認爲3。
設置環境變量ZOO_LOG_DIR爲zookeeper的日誌存放目錄,如:
export ZOO_LOG_DIR=/data/hadoop/zookeeper/log
可將這一行放在ZOOKEEPER_PREFIX以後。
再修改下ZOO_LOG4J_PROP,以讓日誌不是輸出到zookeeper.out,而是寫入到日誌文件,將:ZOO_LOG4J_PROP="INFO,CONSOLE",改爲:
ZOO_LOG4J_PROP="INFO,ROLLINGFILE"
log4j.appender.ROLLINGFILE.MaxFileSize=100MB
log4j.appender.ROLLINGFILE.MaxBackupIndex=10
設置每一個日誌文件大小爲100M,滾動10個。
打開文件bin/zkEnv.sh,能夠看到它有引用conf/java.env。能夠在java.env中設置JAVA_HOME這個環境變量,如:export JAVA_HOME=/data/jdk。
僅在/etc/profile等處設置JAVA_HOME,可能並無論用。若是無論用,查看log/zookeeper.out,能夠看到錯誤「nohup: failed to run command 'java': No such file or directory」。
這步不是必須的,可是推薦將zookeeper/bin加入到環境變量PATH,這樣操做zookeeper會方便些,如:export PATH=/data/zookeeper/bin:$PATH。
若是計劃設置,修改當前用戶的.profile或.bashrc便可,而不是/etc/profile等。
登陸全部ZooKeeper節點,使用bin目錄下的腳本zkServer.sh用來啓動ZooKeeper集羣,但須要帶一個start參數,如:
cd /data/hadoop/zookeeper/bin&&./zkServer.sh start |
中止參數爲stop,重啓參數爲restart,如:./zkServer.sh restart。
因爲啓動時,每一個節點都會試圖去鏈接其它節點,所以先啓動的剛開始會鏈接不上其它的,致使日誌中會包含錯誤信息,在未全啓動以前,這個屬正常現象。
腳本zkServer.sh不但能夠用來啓動ZooKeeper,還能夠用來查看狀態。使用方式爲帶一個status參數,如:
./zkServer.sh status |
如遇到如下錯誤,請稍安勿躁,過會再試,多是由於還未徹底起來:
[hadoop@DEVNET-154-77 ~/zookeeper/bin]$ ./zkServer.sh status JMX enabled by default Using config: /data/hadoop/zookeeper/bin/../conf/zoo.cfg Error contacting service. It is probably not running. |
集羣成功啓動後,將有且只會有一個成爲leader,其它是follower:
[hadoop@DEVNET-154-79 ~/zookeeper/bin]$ ./zkServer.sh status JMX enabled by default Using config: /data/hadoop/zookeeper/bin/../conf/zoo.cfg Mode: leader
[hadoop@DEVNET-154-70 ~/zookeeper/bin]$ ./zkServer.sh status JMX enabled by default Using config: /data/hadoop/zookeeper/bin/../conf/zoo.cfg Mode: follower
[hadoop@DEVNET-154-77 ~/zookeeper/bin]$ ./zkServer.sh status JMX enabled by default Using config: /data/hadoop/zookeeper/bin/../conf/zoo.cfg Mode: follower |
進入ZooKeeper的bin目錄,執行zkCli.sh進入ZooKeeper的命令行操做界面。
./zkCli.sh -server 10.12.154.78:2181 |
參數「-server」中只含一個「-」,用以指定被鏈接的ZooKeeper節點,能夠爲Leader,也能夠爲Follower,「10.12.154.78」爲Leader或Follower的IP或主機名,「2181」爲ZooKeerp提供的客戶端服務端口。
進入ZooKeeper命令行操做界面後,輸入help而後回車,能夠看到ZooKeeper支持的命令列表:
[zk: DEVNET-154-79: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」有點像HDFS中的「ls」,隨便測試下:
[zk: DEVNET-154-79:2181(CONNECTED) 1] ls / [zookeeper, hbase] |
再測試下:
[zk: DEVNET-154-79:2181(CONNECTED) 2] ls /hbase [replication, meta-region-server, rs, splitWAL, backup-masters, table-lock, region-in-transition, online-snapshot, master, running, recovering-regions, draining, namespace, hbaseid, table] |
再測試一下:
[zk: DEVNET-154-79:2181(CONNECTED) 4] ls /hbase/backup-masters [VM-40-171-sles10-64,60000,1398162436871] |
測試建立一個目錄:
[zk: DEVNET-154-79:2181(CONNECTED) 2] create /test test Created /test
[zk: DEVNET-154-79:2181(CONNECTED) 2] ls / [zookeeper, test] |
上面能夠看到有HBase,是由於基於它部署了一套HBase,若未基於它安裝HBase,則不會有這個條目。
若是隻啓動一臺,執行zkServer.sh status查看狀態時,報以下錯誤:
$ zkServer.sh status ZooKeeper JMX enabled by default Using config: /data/zookeeper/bin/../conf/zoo.cfg Error contacting service. It is probably not running. |
若是再啓一臺zookeeper,會發現一個成了leader,另外一個成了follower(經測試兩臺zookeeper即能正常工做):
$ zkServer.sh status ZooKeeper JMX enabled by default Using config: /data/zookeeper/bin/../conf/zoo.cfg Mode: follower
$ zkServer.sh status ZooKeeper JMX enabled by default Using config: /data/zookeeper/bin/../conf/zoo.cfg Mode: leader |
只須要將已有的zookeeper打包複製到新的機器上,而後修改myid文件並設置好,而後啓動zookeeper便可。
用戶在客戶端能夠經過telnet或nc向ZooKeeper提交相應的命令。ZooKeeper經常使用四字命令見下表:
命令 |
說明 |
conf |
輸出相關服務配置的詳細信息 |
cons |
列出全部鏈接到服務器的客戶端的徹底的鏈接、會話的詳細信息,包括接受、發送的包數量、會話ID、操做延遲、最後的操做執行等等信息 |
dump |
列出未經處理的會話和臨時節點 |
envi |
輸出關於服務環境的詳細信息 |
reqs |
列出未經處理的請求 |
ruok |
測試服務是否處於正確狀態。若是確實如此,那麼服務返回「imok」,不然不作任何相應 |
stat |
輸出關於性能和鏈接的客戶端的列表 |
wchs |
列出服務器watch的詳細信息 |
wchc |
經過session列出服務器 watch 的詳細信息,它的輸出是一個與watch相關的會話的列表 |
wchp |
經過路徑列出服務器 watch 的詳細信息,它輸出一個與 session 相關的路徑 |
使用示例:
$ echo ruok|nc 127.0.0.1 2181 $ telnet 127.0.0.1 2181 Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'. stat Zookeeper version: 3.4.8--1, built on 02/06/2016 03:18 GMT Clients: /127.0.0.1:34711[0](queued=0,recved=1,sent=0) /10.43.36.23:43303[1](queued=0,recved=225666,sent=225666)
Latency min/avg/max: 0/0/19 Received: 313930 Sent: 313929 Connections: 2 Outstanding: 0 Zxid: 0x60000cfe4 Mode: follower Node count: 183 Connection closed by foreign host. |
《HBase-0.98.0分佈式安裝指南》
《Hive 0.12.0安裝指南》
《ZooKeeper-3.4.6分佈式安裝指南》
《Hadoop 2.3.0源碼反向工程》
《在Linux上編譯Hadoop-2.4.0》
《Accumulo-1.5.1安裝指南》
《Drill 1.0.0安裝指南》
《Shark 0.9.1安裝指南》
更多,敬請關注技術博客:http://aquester.cublog.cn。
至此,ZooKeeper分佈式安裝大告成功!更多細節,請瀏覽官方文檔:http://zookeeper.apache.org/doc/trunk/zookeeperStarted.html。