標籤:moni ocr ejs gui geo height p2c tno red
一、Zookeeper的搭建方式
Zookeeper的安裝方式有三種,單機模式、叢集模式、偽叢集模式
單機模式:zookeeper只運行在一台伺服器上,適合測試環境。
偽叢集模式:一台物理機上運行多個zookeeper執行個體;
叢集模式:Zookeeper運行於一個叢集上,適合生產環境,這個電腦叢集被稱之為一個集合體。
1.1 zookeeper單機模式搭建
解壓:tar -zxvf zookeeper-3.4.5.tar.gz 重新命名:mv zookeeper-3.4.5 zk
設定檔:在conf目錄下刪除zoo_sample.cfg檔案,建立一個設定檔zoo.cfg。
tickTime=2000
dataDir=/usr/local/zk/data
dataLogDir=/usr/local/zk/dataLog
clientPort=2181
配置環境變數:為了今後操作方便,我們需要對Zookeeper的環境變數進行配置,方法如下在/etc/profile檔案中加入如下內容:
export ZOOKEEPER_HOME=/usr/local/zk
export PATH=.:$HADOOP_HOME/bin:$ZOOKEEPER_HOME/bin:$JAVA_HOME/bin:$PATH
啟動ZooKeeper的Server:zkServer.sh start;關閉ZooKeeper的Server:zkServer.sh stop
1.2 Zookeeper的偽叢集模式搭建
Zookeeper不但可以在單機上運行單機模式Zookeeper,而且可以在單機類比叢集模式 Zookeeper的運行,也就是將不同節點運行在同一台機器。我們知道偽分布模式下Hadoop的操作和分布式模式下有著很大的不同,但是在叢集為分布 式模式下對Zookeeper的操作卻和叢集模式下沒有本質的區別。顯然,叢集偽分布式模式為我們體驗Zookeeper和做一些嘗試性的實驗提供了很大 的便利。比如,我們在實驗的時候,可以先使用少量資料在叢集偽分布模式下進行測試。當測試可行的時候,再將資料移植到叢集模式進行真實的資料實驗。這樣不 但保證了它的可行性,同時大大提高了實驗的效率。這種搭建方式,比較簡便,成本比較低,適合測試和學習,如果你的手頭機器不足,就可以在一台機器上部署了 3個server。
在一台機器上部署了3個server,需要注意的是在叢集為分布式模式下我們使用的每個配置文檔類比一台機器,也就是說單台機器及上運行多個Zookeeper執行個體。但是,必須保證每個配置文檔的各個連接埠號碼不能衝突,除了clientPort不同之外,dataDir也不同。另外,還要在dataDir所對應的目錄中建立myid檔案來指定對應的Zookeeper伺服器執行個體。
■ clientPort連接埠:如果在1台機器上部署多個server,那麼每台機器都要不同的 clientPort,比如 server1是2181,server2是2182,server3是2183
■ dataDir和dataLogDir:dataDir和dataLogDir也需要區分下,將資料檔案和記錄檔分開存放,同時每個server的這兩變數所對應的路徑都是不同的
■ server.X和myid: server.X 這個數字就是對應,data/myid中的數字。在3個server的myid檔案中分別寫入了0,1,2,那麼每個server中的zoo.cfg都配 server.0 server.2,server.3就行了。因為在同一台機器上,後面連著的2個連接埠,3個server都不要一樣,否則連接埠衝突
下面是我所配置的叢集偽分布模式,分別通過zoo1.cfg、zoo2.cfg、zoo3.cfg來類比由三台機器的Zookeeper叢集,代碼清單 zoo1.cfg如下:
# The number of milliseconds of each ticktickTime=2000# The number of ticks that the initial# synchronization phase can takeinitLimit=10# The number of ticks that can pass between# sending a request and getting an acknowledgementsyncLimit=5# the directory where the snapshot is stored.dataDir=/usr/local/zk/data_1# the port at which the clients will connectclientPort=2181#the location of the log filedataLogDir=/usr/local/zk/logs_1server.0=localhost:2287:3387server.1=localhost:2288:3388server.2=localhost:2289:3389
代碼清單 zoo2.cfg如下:
# The number of milliseconds of each ticktickTime=2000# The number of ticks that the initial# synchronization phase can takeinitLimit=10# The number of ticks that can pass between# sending a request and getting an acknowledgementsyncLimit=5# the directory where the snapshot is stored.dataDir=/usr/local/zk/data_2# the port at which the clients will connectclientPort=2182#the location of the log filedataLogDir=/usr/local/zk/logs_2server.0=localhost:2287:3387server.1=localhost:2288:3388server.2=localhost:2289:3389
代碼清單 zoo3.cfg如下:
# The number of milliseconds of each ticktickTime=2000# The number of ticks that the initial# synchronization phase can takeinitLimit=10# The number of ticks that can pass between# sending a request and getting an acknowledgementsyncLimit=5# the directory where the snapshot is stored.dataDir=/usr/local/zk/data_3# the port at which the clients will connectclientPort=2183#the location of the log filedataLogDir=/usr/local/zk/logs_3server.0=localhost:2287:3387server.1=localhost:2288:3388server.2=localhost:2289:3389
啟動
zkServer.sh start zoo1.shzkServer.sh start zoo2.shzkServer.sh start zoo3.sh
啟動過程,如所示:
啟動結果,如所示:
在運行完第一條指令之後,會出現一些錯誤異常,產生異常資訊的原因是由於Zookeeper 服務的每個執行個體都擁有全域配置資訊,他們在啟動的時候會隨時隨地的進行Leader選舉操作。此時,第一個啟動的Zookeeper需要和另外兩個 Zookeeper執行個體進行通訊。但是,另外兩個Zookeeper執行個體還沒有啟動起來,因此就產生了這的異樣資訊。我們直接將其忽略即可,待把圖中“2 號”和“3號”Zookeeper執行個體啟動起來之後,相應的異常資訊自然會消失。此時,可以通過下面三條命令,來查詢。
zkServer.sh status zoo1.cfg zkServer.sh status zoo2.cfg zkServer.sh status zoo3.cfg
Zookeeper服務的運行狀態,如所示:
1.3 Zookeeper的叢集模式搭建
為了獲得可靠地Zookeeper服務,使用者應該在一個機群上部署Zookeeper。只要機群上大多數的Zookeeper服務啟動了,那麼總的 Zookeeper服務將是可用的。叢集的配置方式,和前兩種類似,同樣需要進行環境變數的配置。在每台機器上conf/zoo.cf設定檔的參數設定 相同
1.3.1 建立myid
在dataDir(/usr/local/zk/data)目錄建立myid檔案
Server0機器的內容為:0
Server1機器的內容為:1
Server2機器的內容為:2
1.3.2 編寫設定檔
在conf目錄下刪除zoo_sample.cfg檔案,建立一個設定檔zoo.cfg,如下所示,代碼清單 zoo.cfg中的參數設定
# The number of milliseconds of each ticktickTime=2000# The number of ticks that the initial# synchronization phase can takeinitLimit=10# The number of ticks that can pass between# sending a request and getting an acknowledgementsyncLimit=5# the directory where the snapshot is stored.dataDir=/usr/local/zk/data# the port at which the clients will connectclientPort=2183#the location of the log filedataLogDir=/usr/local/zk/logserver.0=hadoop:2288:3388server.1=hadoop0:2288:3388server.2=hadoop1:2288:3388
1.3.3 啟動
分別在3台機器上啟動ZooKeeper的Server:zkServer.sh start;
二、Zookeeper的配置
Zookeeper的功能特性是通過Zookeeper設定檔來進行控制管理的(zoo.cfg).這樣的設計其實有其自身的原因,通過前面對Zookeeper的配置可以看出,在對Zookeeper叢集進行配置的時候,它的配置文檔是完全相同的。叢集偽分布模式中,有少部分是不同的。這樣的配置方式使得在部署Zookeeper服務的時候非常方便。如果伺服器使用不同的設定檔,必須確保不同設定檔中的伺服器列表相匹配。
在設定Zookeeper配置文檔時候,某些參數是可選的,某些是必須的。這些必須參數就構成了Zookeeper配置文檔的最低配置要求。另外,若要對Zookeeper進行更詳細的配置,可以參考下面的內容。
2.1 基本配置
下面是在最低配置要求中必須配置的參數:
(1) client:監聽用戶端串連的連接埠。
(2) tickTime:基本事件單元,這個時間是作為Zookeeper伺服器之間或用戶端與伺服器之間維持心跳的時間間隔,每隔tickTime時間就會發送一個心跳;最小 的session到期時間為2倍tickTime
dataDir:儲存記憶體中資料庫快照集的位置,如果不設定參數,更新食物的日誌將被儲存到預設位置。
應該謹慎的選擇日誌存放的位置,使用專用的日誌存放裝置能夠大大提高系統的效能,如果將日誌儲存在比較繁忙的存放裝置上,那麼將會很大程度上影像系統效能。
2.2 進階配置
下面是進階配置參數中可選配置參數,使用者可以使用下面的參數來更好的規定Zookeeper的行為:
(1) dataLogdDir
這個操作讓管理機器把交易記錄寫入“dataLogDir”所指定的目錄中,而不是“dataDir”所指定的目錄。這將允許使用一個專用的日誌裝置,協助我們避免日誌和快照的競爭。配置如下:
# the directory where the snapshot is stored
dataDir=/usr/local/zk/data
(2) maxClientCnxns
這個操作將限制串連到Zookeeper的用戶端數量,並限制並發串連的數量,通過IP來區分不同的用戶端。此配置選項可以阻止某些類別的Dos攻擊。將他設定為零或忽略不進行設定將會取消對並發串連的限制。
例如,此時我們將maxClientCnxns的值設為1,如下所示:
# set maxClientCnxns
maxClientCnxns=1
啟動Zookeeper之後,首先用一個用戶端串連到Zookeeper伺服器上。之後如果有第二個用戶端嘗試對Zookeeper進行串連,或者有某些隱式的對用戶端的串連操作,將會觸發Zookeeper的上述配置。
(3) minSessionTimeout和maxSessionTimeout
即最小的會話逾時和最大的會話逾時時間。在預設情況下,minSession=2*tickTime;maxSession=20*tickTime。
2.3 叢集配置
(1) initLimit
此配置表示,允許follower(相對於Leaderer言的“用戶端”)串連並同步到Leader的初始化連線時間,以tickTime為單位。當初始化連線時間超過該值,則表示串連失敗。
(2) syncLimit
此配置項表示Leader與Follower之間發送訊息時,請求和應答時間長度。如果follower在設定時間內不能與leader通訊,那麼此follower將會被丟棄。
(3) server.A=B:C:D
A:其中 A 是一個數字,表示這個是伺服器的編號;
B:是這個伺服器的 ip 地址;
C:Leader選舉的連接埠;
D:Zookeeper伺服器之間的通訊連接埠。
(4) myid和zoo.cfg
除了修改 zoo.cfg 設定檔,叢集模式下還要配置一個檔案 myid,這個檔案在 dataDir 目錄下,這個檔案裡面就有一個資料就是 A 的值,Zookeeper 啟動時會讀取這個檔案,拿到裡面的資料與 zoo.cfg 裡面的配置資訊比較從而判斷到底是那個 server。
三、搭建ZooKeeper伺服器叢集
搭建要求:
(1) zk伺服器叢集規模不小於3個節點
(2) 要求各伺服器之間系統時間要保持一致。
3.1 安裝配置ZK
(1) 使用WinScp將Zk傳輸到Hadoop主機上的/usr/local,我用的版本是zookeeper-3.4.5.tar.gz。
(2) 在hadoop的/usr/local目錄下,解壓縮zk....tar.gz,設定環境變數
解壓縮:在/usr/local目錄下,執行命令:tar -zxvf zookeeper-3.4.5.tar.gz,如所示:
重新命名:解壓後將檔案夾,重新命名為zk,執行命令: mv zookeeper-3.4.5 zk,如所示:
設定環境變數:執行命令: vi /etc/profile ,添加 :export ZOOKEEPER_HOME=/usr/local/zk,2.3所示的內容。執行命令:source /etc/profile 如所示:
2.2 修改ZK設定檔
(1) 重新命名:將/usr/local/zk/conf目錄下zoo_sample.cfg,重新命名為zoo.cfg,執行命令:mv zoo_sample.cfg zoo.cfg。如如所示:
(2) 查看:在/usr/local/zk/conf目錄下,修改檔案 vi zoo.cfg,檔案內容如所示。在該檔案中dataDir表示檔案存放目錄,它的預設設定為/tmp/zookeeper這是一個臨時存放目錄,每 次重啟後會丟失,在這我們自己設一個目錄,/usr/local/zk/data。
(3) 建立檔案夾:mkdir /usr/local/zk/data
(4) 建立myid:在data目錄下,建立檔案myid,值為0;vi myid ;內容為0。
(5) 編輯:編輯該檔案,執行vi zoo.cfg ,修改dataDir=/usr/local/zk/data。
新增:
server.0=hadoop:2888:3888
server.1=hadoop0:2888:3888
server.2=hadoop1:2888:3888
tickTime :這個時間是作為 Zookeeper 伺服器之間或用戶端與伺服器之間維持心跳的時間間隔,也就是每個 tickTime 時間就會發送一個心跳;
dataDir:顧名思義就是 Zookeeper 儲存資料的目錄,預設情況下,Zookeeper 將寫資料的記錄檔也儲存在這個目錄裡;
clientPort:這個連接埠就是用戶端串連 Zookeeper 伺服器的連接埠,Zookeeper 會監聽這個連接埠,接受用戶端的訪問請求。
當這些配置項配置好後,就可以啟動 Zookeeper 了,啟動後使用命令echo ruok | nc localhost 2181檢查 Zookeeper 是否已經在服務。
2.3 配置其他節點
(1) 把haooop主機的zk目錄和/etc/profile目錄,複製到hadoop0和hadoop1中。執行命令:
scp -r /usr/local/zk/ hadoop0:/usr/local/
scp -r /usr/local/zk/ hadoop1:/usr/local/
scp /etc/profile hadoop0:/etc/
scp /etc/profile hadoop1:/etc/
ssh hadoop0
suorce /etc/profile
vi /usr/local/zk/data/myid
exit
ssh hadoop1
suorce /etc/profile
vi /usr/local/zk/data/myid
exit
(2) 把hadoop1中相應的myid的值改為1,把hadoop2中相應的myid的值改為2。
四、啟動檢驗
(1) 啟動,在三個節點上分別執行命令zkServer.sh start
hadoop節點:
hadoop0節點:
hadoop1節點:
(2) 檢驗,在三個節點上分別執行命令zkServer.sh status,從下面的圖中我們會發現hadoop和hadoop1為Follower,hadoop0為Leader。
hadoop節點:
hadoop0節點:
hadoop1節點:
Zookeeper安裝與配置