Hadoop中的子專案Zookeeper能做什麼

2021-09-01 03:11:59 字數 1936 閱讀 2394

原始出處和作者資訊。

很高興得看到yahoo捐獻的zookeeper已經從sourceforge遷移到apache,並成為hadoop的子專案.那麼zookeeper是什麼呢?zookeeper是google的chubby乙個開源的實現.是高有效和可靠的協同工作系統.zookeeper能夠用來leader選舉,配置資訊維護等.在乙個分布式的環境中,我們需要乙個master例項或儲存一些配置資訊,確保檔案寫入的一致性等.zookeeper能夠保證如下3點:

在zookeeper中,znode是乙個跟unix檔案系統路徑相似的節點,可以往這個節點儲存或獲取資料.如果在建立znode時flag設定 為ephemeral,那麼當這個建立這個znode的節點和zookeeper失去連線後,這個znode將不再存在在zookeeper 裡.zookeeper使用watcher察覺事件資訊,當客戶端接收到事件資訊,比如連線超時,節點資料改變,子節點改變,可以呼叫相應的行為來處理數 據.zookeeper的wiki頁面展示了如何使用zookeeper來處理事件通知,佇列,優先佇列,鎖,共享鎖,可撤銷的共享鎖,兩階段提交.

那麼zookeeper能幫我們作什麼事情呢?簡單的例子:假設我們我們有個20個搜尋引擎的伺服器(每個負責總索引中的一部分的搜尋任務)和乙個 總伺服器(負責向這20個搜尋引擎的伺服器發出搜尋請求並合併結果集),乙個備用的總伺服器(負責當總伺服器宕機時替換總伺服器),乙個web的 cgi(向總伺服器發出搜尋請求).搜尋引擎的伺服器中的15個伺服器現在提供搜尋服務,5個伺服器正在生成索引.這20個搜尋引擎的伺服器經常要讓正在 提供搜尋服務的伺服器停止提供服務開始生成索引,或生成索引的伺服器已經把索引生成完成可以搜尋提供服務了.使用zookeeper可以保證總伺服器自動 感知有多少提供搜尋引擎的伺服器並向這些伺服器發出搜尋請求,備用的總伺服器宕機時自動啟用備用的總伺服器,web的cgi能夠自動地獲知總伺服器的網路 位址變化.這些又如何做到呢?

提供搜尋引擎的伺服器都在zookeeper中建立znode,zk.create("/search/nodes/node1",

"hostname".getbytes(), ids.open_acl_unsafe, createflags.ephemeral);

總伺服器可以從zookeeper中獲取乙個znode的子節點的列表,zk.getchildren("/search/nodes", true);

總伺服器遍歷這些子節點,並獲取子節點的資料生成提供搜尋引擎的伺服器列表.

當總伺服器接收到子節點改變的事件資訊,重新返回第二步.

總伺服器在zookeeper中建立節點,zk.create("/search/master", "hostname".getbytes(), ids.open_acl_unsafe, createflags.ephemeral);

備用的總伺服器監控zookeeper中的"/search/master"節點.當這個znode的節點資料改變時,把自己啟動變成總伺服器,並把自己的網路位址資料放進這個節點.

web的cgi從zookeeper中"/search/master"節點獲取總伺服器的網路位址資料並向其傳送搜尋請求.

web的cgi監控zookeeper中的"/search/master"節點,當這個znode的節點資料改變時,從這個節點獲取總伺服器的網路位址資料,並改變當前的總伺服器的網路位址.

在我的測試中:乙個zookeeper的集群中,3個zookeeper節點.乙個leader,兩個follower的情況下,停掉leader,然後兩個follower選舉出乙個leader.獲取的資料不變.我想zookeeper能夠幫助hadoop做到:

hadoop,使用zookeeper的事件處理確保整個集群只有乙個namenode,儲存配置資訊等.

hbase,使用zookeeper的事件處理確保整個集群只有乙個hmaster,察覺hregionserver聯機和宕機,儲存訪問控制列表等.

zookeeper doc:

zookeeper.pdf

zookeeper video:

Hadoop中的子專案Zookeeper能做什麼

很高興得看到yahoo捐獻的zookeeper已經從sourceforge遷移到apache,並成為hadoop的子專案.那麼zookeeper是什麼呢?zookeeper是google的chubby乙個開源的實現.是高有效和可靠的協同工作系統.zookeeper能夠用來leader選舉,配置資訊維...

maven deploy 之父子專案依賴

首先父類的pom定義 com.digital.promotion media promotion 1.0 snapshot pommedia promotion 父類pom的打包方式一般是pom格式。在子類中引用了父類的專案,子類的pom.xml 如下。com.digital.promotion m...

禁用驗證標籤子專案

我建立乙個gerrit伺服器。我想要一些專案驗證標籤,詹金斯構建,如果成功將認證標誌。這對我來說很不錯。我也有一些專案,不需要詹金斯構建來驗證。所以我想禁用驗證國旗和更改上submit able 2 評審。從gerrit文件,新增乙個空標籤為孩子在父母將刪除標籤。如何做呢?我建立了乙個中間的專案。但...