本文匯總了使用Zookeeper時的常見問題。
ZooKeeper服務不穩定,發生異常重啟等情況,怎麼辦?
造成服務不穩定的情況可能有很多,最常見的情況是znode數量過大或者snapshot過大,由於ZooKeeper將所有的znode維護在記憶體中,並且需要在節點間進行資料同步,因此過大的znode數量或者容量會對服務穩定性造成影響。ZooKeeper的定位是一個分布式協調服務,不能把ZooKeeper當作一個檔案系統來使用,通常,znode數量應盡量保持在10萬以下,snapshot大小應在800 MB以下。
- 您可以在E-MapReduce控制台的叢集監控頁簽,查看Zookeeper的znode數量監控。
- 查看snapshot大小。
- 您可以先在ZooKeeper服務的配置頁簽,搜尋並查看dataDir的參數值,擷取Zookeeper的資料目錄。

- 執行以下命令,在ZooKeeper資料目錄下查看snapshot的大小。
ls -lrt /mnt/disk1/zookeeper/data/version-2/snapshot*如果出現znode數量或snapshot過大的情況,需要排查znode分布情況,避免相關上層應用對ZooKeeper的過度使用。
- 您可以先在ZooKeeper服務的配置頁簽,搜尋並查看dataDir的參數值,擷取Zookeeper的資料目錄。
如何平滑遷移ZooKeeper的資料目錄?
如果因為磁碟空間或者磁碟效能等問題,希望更改ZooKeeper的資料目錄,您可以按照以下步驟逐個節點修改並遷移資料目錄,實現不停止ZooKeeper服務的平滑遷移。
說明 例如,將資料目錄從/mnt/disk1/zookeeper/data更改為/mnt/disk2/zookeeper/data。叢集的master-1-2 節點為leader,master-1-1和master-1-3節點為follower,遷移時建議先操作follower再操作leader。
- 修改資料目錄並儲存配置。
- 在ZooKeeper服務的配置頁簽,搜尋dataDir參數,修改參數值為新目錄/mnt/disk2/zookeeper/data。
- 單擊儲存。
- 在彈出對話方塊中,輸入執行原因,單擊儲存。
- 部署配置。
- 在ZooKeeper服務的配置頁簽,單擊部署客戶配置。
- 在彈出的對話方塊中,輸入執行原因,單擊確定。
- 在確認對話方塊中,單擊確定。
- 可選:驗證資料目錄。
- 使用SSH方式登入叢集,詳情請參見登入叢集。
- 執行以下命令,查看zoo.cfg設定檔的dataDir參數值。
cat /etc/emr/zookeeper-conf/zoo.cfg顯示資料目錄已更新為新目錄。
- 停止master-1-1節點。
- 在ZooKeeper服務的部署拓撲頁簽,單擊master-1-1節點操作列的停止。
- 在執行叢集操作對話方塊中,輸入執行原因,單擊確定。
- 在確認對話方塊中,單擊確定。
- 目錄遷移。
- 使用SSH方式登入叢集,詳情請參見登入叢集。
- 執行以下命令,在master-1-1節點進行目錄遷移及相關使用權限設定。
sudo rm -rf /mnt/disk2/zookeeper && sudo cp -rf /mnt/disk1/zookeeper /mnt/disk2/zookeeper && sudo chown hadoop:hadoop -R /mnt/disk2/zookeeper
- 啟動master-1-1節點。
- 在ZooKeeper服務的狀態頁簽,單擊ZookeeperServer操作列的啟動。
- 在彈出的對話方塊中,輸入執行原因,單擊確定。
- 在確認對話方塊中,單擊確定。
重新整理頁面,直至master-1-1節點的健康狀態顯示為良好。
- 登入master-1-3節點,重複執行步驟4~步驟6。
- 登入master-1-2 節點,重複執行步驟4~步驟6。待所有節點恢複正常時,節點遷移完成。說明 master-1-2 節點原本為leader,執行停止操作後會變為follower,leader會切換到另兩個節點的任一節點上。