2012-06-19 91 views
1

我正在爲Hadoop構建一個自動化安裝腳本,而且我遇到了HBase無法啓動的問題,因爲HDFS尚未完全引導並準備就緒。我如何以編程方式(從Bash,理想情況下)告訴HDFS系統是否已準備好引導HBase,所以我可以等到它?如何讓HBase等待直到HDFS準備就緒?

我嘗試使用「hadoop dfsadmin -report」併爲正確的節點數量進行grepping,但顯然這仍然會在集羣實際上準備就緒之前返回。

回答

3

使用hadoop dfsadmin -safemode wait檢查HDFS是否超出安全模式。這樣的事情應該做的伎倆:

while $HADOOP_HOME/bin/hadoop dfsadmin -safemode wait | grep ON 
do 
    sleep 1s # Or 10s or 1m or whatever time 
done 

編輯:由於levand在評論中提到,按照HADOOP-756-safemode wait本身會等到安全模式是關閉的。在這種情況下,你可以簡單地發出wait,while循環就沒有必要了。但是,如果你想繼續嘗試一段時間並且在DFS還沒有啓動的情況下終止進程,那麼while循環可能仍然有用。當我們在設置集羣時出錯時,我看到了這種情況。

+0

謝謝!一個問題:閱讀dfsadmin -safemode wait命令(https://issues.apache.org/jira/browse/HADOOP-756),它看起來像'wait'已經被阻塞了,不需要編寫你自己的循環。我錯過了什麼嗎? – levand

+0

啊,真棒。很長一段時間,因爲我從事這方面的工作。集羣管理很長時間外包給另一個部門,所以現在這都是別人的頭痛; D –