1
我正在为Hadoop构建一个自动化安装脚本,而且我遇到了HBase无法启动的问题,因为HDFS尚未完全引导并准备就绪。我如何以编程方式(从Bash,理想情况下)告诉HDFS系统是否已准备好引导HBase,所以我可以等到它?如何让HBase等待直到HDFS准备就绪?
我尝试使用“hadoop dfsadmin -report”并为正确的节点数量进行grepping,但显然这仍然会在集群实际上准备就绪之前返回。
我正在为Hadoop构建一个自动化安装脚本,而且我遇到了HBase无法启动的问题,因为HDFS尚未完全引导并准备就绪。我如何以编程方式(从Bash,理想情况下)告诉HDFS系统是否已准备好引导HBase,所以我可以等到它?如何让HBase等待直到HDFS准备就绪?
我尝试使用“hadoop dfsadmin -report”并为正确的节点数量进行grepping,但显然这仍然会在集群实际上准备就绪之前返回。
使用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
循环可能仍然有用。当我们在设置集群时出错时,我看到了这种情况。
谢谢!一个问题:阅读dfsadmin -safemode wait命令(https://issues.apache.org/jira/browse/HADOOP-756),它看起来像'wait'已经被阻塞了,不需要编写你自己的循环。我错过了什么吗? – levand
啊,真棒。很长一段时间,因为我从事这方面的工作。集群管理很长时间外包给另一个部门,所以现在这都是别人的头痛; D –