文章來自:https://examples.javacodegeeks.com/enterPRise-java/apache-hadoop/apache-hadoop-zookeeper-example/
===文章采用Google Translator=====Google翻譯:建議先看原文。
在這個例子中,我們將探討Apache Zookeeper,從簡介開始,然后是設置Zookeeper并使其運行的步驟。
Apache Zookeeper是分布式系統的構建塊。當設計分布式系統時,總是需要開發和部署可以通過集群協調的東西。這是Zookeeper進入圖片。它是一個由Apache維護的開源項目,用于維護和協調分布式集群。Zookeeper提供的一些服務包括: 命名服務:名稱服務用于將名稱映射到某種數據,然后可以使用此名稱訪問。例如,DNS服務器映射到服務器的ip地址,然后客戶端可以使用該URL名稱訪問服務器。在分布式系統中,我們可能需要使用分配給它們的名稱來檢查服務器或節點的狀態。這可以通過使用由Zookeeper默認提供的命名服務接口來完成。
配置管理:Zookeeper還提供集中管理分布式系統配置的選項。配置可以集中存儲在Zookeeper上,任何加入分布式系統的新節點都可以從Zookeeper中選擇配置。這使得管理配置很容易,免費。
領導選舉:分布式系統通常需要一個自動故障轉移策略,以防一些節點故障。Zookeeper提供了使用leader選擇功能這樣做的選項。
鎖定:在每個分布式系統中,將有一些共享資源,并且多個服務可能需要訪問此資源。因此,為了允許對此資源的序列化訪問,需要鎖定機制。Zookeeper提供這個功能。
同步:對共享資源的訪問也需要在分布式設置中同步。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
在本節中,我們將通過在localhost上設置Zookeeper服務器的步驟來進行實驗。Zookeeper在包中提供單個服務器,可以直接在機器上運行。
首先,我們將檢查是否在系統上安裝了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 -version3.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/subnode4.6刪除節點
在Zookeeper CLI中使用rmr命令刪除節點非常容易。刪除節點也刪除其所有子節點。以下是我們為此示例創建的用于刪除firstnode的代碼:
rmr /firstnode5.結論
這使我們得出這個Apache Zookeeper的介紹性例子的結論。在這個例子中,我們開始了Zookeeper的介紹和一般的架構,然后學習如何在單個機器中設置Zookeeper。我們還看到使用Zookeeper CLI與Zookeeper服務接口也很容易,并且命令存在于所有的基本交互。
6.下載配置文件
您可以在此處下載此示例中使用的配置文件zoo.cfg:Zookeeper Configuration
新聞熱點
疑難解答