文章來自:https://examples.javacodegeeks.com/enterprise-java/apache-hadoop/apache-hadoop-zookeeper-example/
===文章採用Google Translator=====Google翻譯:建議先看原文。
在這個例子中,我們將探討Apache Zookeeper,從簡介開始,然後是設定Zookeeper並使其啟動並執行步驟。 1.介紹
Apache Zookeeper是分布式系統的構建塊。當設計分布式系統時,總是需要開發和部署可以通過叢集協調的東西。這是Zookeeper進入圖片。它是一個由Apache維護的開源項目,用於維護和協調分布式叢集。Zookeeper提供的一些服務包括:
命名服務:名稱服務用於將名稱映射到某種資料,然後可以使用此名稱訪問。例如,DNS伺服器映射到伺服器的IP地址,然後用戶端可以使用該URL名稱訪問伺服器。在分布式系統中,我們可能需要使用分配給它們的名稱來檢查伺服器或節點的狀態。這可以通過使用由Zookeeper預設提供的命名服務介面來完成。
組態管理:Zookeeper還提供集中管理分布式系統配置的選項。配置可以集中儲存在Zookeeper上,任何加入分布式系統的新節點都可以從Zookeeper中選擇配置。這使得管理配置很容易,免費。
領導選舉:分布式系統通常需要一個自動容錯移轉策略,以防一些節點故障。Zookeeper提供了使用leader選擇功能這樣做的選項。
鎖定:在每個分布式系統中,將有一些共用資源,並且多個服務可能需要訪問此資源。因此,為了允許對此資源的序列化訪問,需要鎖定機制。Zookeeper提供這個功能。
同步:對共用資源的訪問也需要在分布式設定中同步。Zookeeper還提供了一個簡單的介面。 2. Zookeeper如何工作。
Zookeeper遵循用戶端 - 伺服器模型。其中用戶端是叢集中的電腦。 這些機器也稱為節點。 這些用戶端使用伺服器提供的服務。Zookeeper協調分布式系統,但它本身也是一個分布式系統。 分布式模式下的Zookeeper伺服器集合稱為Zookeeper集合。
在任何給定的時間,一個用戶端可以只串連到一個Zookeeper伺服器,但每個zookeeper伺服器可以處理多個用戶端的時間。用戶端定期向伺服器發送ping(心跳),以使其知道它是活動的並串連到伺服器。Zookeeper伺服器還響應一個確認通知它還活著並串連。這些ping / heartbeats的頻率可以在設定檔中設定,我們將在下一節中看到。
如果用戶端沒有收到來自在指定時間段內串連到的伺服器的確認,用戶端然後嘗試從池串連到另一個伺服器,並且在成功的串連上,用戶端工作階段被傳送到新的Zookeeper伺服器它串連到。
Zookeeper遵循類似於檔案系統的分層系統在節點中儲存資料,它被稱為znode。Znode源自“Zookeeper資料節點”。每個znode作為一個目錄,可以有多個子節點,階層繼續。為了訪問znode,Zookeeper遵循檔案路徑類似的結構。例如:到znode firstnode的路徑和相應的子節點可以看起來像這樣:/firstnode/sub-node/sub-sub-node 3.Zookeeper設定
在本節中,我們將通過在localhost上設定Zookeeper伺服器的步驟來進行實驗。Zookeeper在包中提供單個伺服器,可以直接在機器上運行。
3.1系統要求 Java,JDK 6或更高版本(我們將使用JDK 8) 最小2GB RAM 雙核處理器 Linux作業系統。 Linux作為開發和生產系統都受到支援。 Windows和MacOSX只支援作為開發系統,而不是作為生產系統。
3.2安裝Java
首先,我們將檢查是否在系統上安裝了Java,如果沒有,我們需要首先安裝Java。要檢查是否安裝了Java,請使用:
java -version
如果這返回Java版本號碼,則安裝Java。 確保它至少是JDK 6或更高版本。如果沒有安裝Java,我們必須先安裝它。 使用以下命令安裝Java JDK 8。
sudo apt-get updatesudo apt-get intstall openjdk-8-jre-headless
第一個命令將更新所有已安裝的軟體包,第二個命令將安裝OpenJDK 8.以下是我們在運行上述命令後得到的控制台輸出:
要檢查安裝是否成功,請再次運行命令:
java -version
3.3下載Zookeeper
下一步是從Resease網站下載穩定版本的Zookeeper。從發布網站的下載部分手動下載穩定版本(在編寫本文時,穩定版本為3.4.6)。 我們可以使用網站中提到的任何鏡像(如下面的螢幕截圖所示),並解壓縮/解壓到所需的檔案夾。
或使用以下命令下載和解壓:
wget http://www.eu.apache.org/dist/zookeeper/stable/zookeeper-3.4.6.tar.gztar -xvf zookeeper-3.4.6.tar.gzcd zookeeper-3.4.6/
3.4資料目錄
接下來,我們需要一個目錄來儲存與znode和其他zookeeper中繼資料相關的資料。為此,我們將在/ var / lib /中通過名稱zookeeper建立一個新目錄
sudo mkdir /var/lib/zookeepercd /var/libls
當使用sudo建立此目錄時,它將預設使用root作為所有者,我們需要更改為Zookeeper將啟動並執行使用者,以便Zookeeper伺服器可以訪問該目錄沒有任何麻煩。要更改使用者,請從檔案夾/ var / lib運行以下命令:
cd /var/libsudo chown raman: zookeeper
注意:":"和zookeeper之間有一個空格。這裡我們只提到raman使用者作為目錄的所有者,沒有使用者組(usergroup在:)之後。 所以它會將使用者的預設使用者組分配給目錄zookeeper。
要確保所有者已更改,請轉到/ var / lib / zookeeper目錄的屬性並檢查許可權。它應該分配給我們設定的使用者:
3.5設定檔
現在是時候對Zookeeper伺服器的配置進行必要的更改。它已經包含我們將用作模板的樣本設定檔。 樣本設定檔位於檔案夾zookeeper-3.4.6 / conf /中,並命名為zoo-sample.cfg
首先讓我們將檔案重新命名為zoo.cfg。 檔案的名稱無關緊要,但conf檔案夾中應該只有一個.cfg檔案。
cd zookeeper-3.4.6/confmv zoo-sample.cfg zoo.cfg
現在,讓我們編輯這個zoo.cfg檔案。 在這個例子中,我們使用了nano編輯器,但是你可以使用任何你喜歡的編輯器。
nano zoo.cfg
確保檔案看起來像下面的螢幕截圖,並包含以下設定:
tickTime = 2000initLimit=10syncLimit=5dataDir=/var/lib/zookeeperclientPort=2181
注意:dataDir應該設定為我們在上一步建立的目錄,即/ var / lib / zookeeper
讓我們簡要概述這些配置設定的含義:
tickTime:Zookeeper對所有系統節點進行心跳檢測,以檢查所有節點是否存活和串連的時間。 initTime:首次同步處理階段可以採用的滴答數。 syncTime:在發送請求和擷取確認之間可以通過的tick數。 dataDir:由Zookeeper儲存記憶體資料庫快照集和交易記錄的目錄。 clientPort:將用於用戶端串連的連接埠。 3.6啟動伺服器
現在是啟動Zookeeper伺服器的時候了。 Zookeeper內建了一個指令檔,以方便啟動伺服器。該檔案稱為zkServer.sh。 所以要啟動伺服器使用以下代碼:
cd zookeeper-3.4.6/bin/zkServer.sh start
它應該顯示類似以下螢幕截圖的控制台輸出:
4. Zookeeper伺服器基本互動 4.1啟動CLI
一旦Zookeeper伺服器成功運行,我們可以啟動CLI(命令列介面)與伺服器互動。使用以下命令:
cd zookeeper-3.4.6/bin/zkCLi.sh -server
使用此命令,控制台將進入Zookeeper命令列模式,我們可以使用Zookeeper特定的命令與伺服器互動。
4.2建立第一個Znode
讓我們從建立一個新節點開始。 下面是Zookeeper命令建立一個帶有虛擬資料的新znode。
create /firstnode helloworlddummytext
這裡,firstnode是將在根路徑上建立的znode的名稱,如/表示根路徑,helloworlddummytext是儲存在znode記憶體中的虛擬文本。
4.3從第一Znode檢索資料
類似於我們如何建立一個新的znode,我們可以使用CLI(命令列介面)獲得znode的詳細資料和資料。以下是從znode擷取資料的命令。
get /firstnode
如果你在截圖中注意到,連同我們在建立時儲存在znode中的資料,伺服器也返回了一些與這個特定znode相關的中繼資料。
中繼資料中的一些重要欄位是:
ctime:建立此znode的時間。 mtime:上次修改時間。 dataVersion:每次修改資料時發生變化的資料的版本 datalength:儲存在znode中的資料的長度。在這種情況下,資料是helloworlddummydata,長度為19。 numchildren:此aprticualr znode的子項數。 4.4修改Znode中的資料
如果我們要修改特定節點中的資料,Zookeeper也為其提供一個命令。以下是如何修改現有znode中的資料:
set /firstnode helloworld
其中firstnode是現有的znode,helloworld是需要在znode中寫入的新資料。當設定新資料時,舊資料將被刪除。
如果你注意到在上面的截圖中datalength,mtime和dataversion也會更新,當一個新的值設定。 4.5建立子節點
在現有節點中建立子節點與建立新節點一樣簡單。我們只需要傳遞新子節點的完整路徑。
create /firstnode/subnode subnodedataget /firstnode/subnode
4.6刪除節點
在Zookeeper CLI中使用rmr命令刪除節點非常容易。刪除節點也刪除其所有子節點。 以下是我們為此樣本建立的用於刪除firstnode的代碼:
rmr /firstnode
5.結論
這使我們得出這個Apache Zookeeper的介紹性例子的結論。在這個例子中,我們開始了Zookeeper的介紹和一般的架構,然後學習如何在單個機器中設定Zookeeper。 我們還看到使用Zookeeper CLI與Zookeeper服務介面也很容易,並且命令存在於所有的基本互動。
6.下載設定檔
您可以在此處下載此樣本中使用的設定檔zoo.cfg:Zookeeper Configuration