2012-06-19 58 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 –