我正在为 Hadoop 构建一个自动安装脚本,并且遇到了 HBase 无法启动的问题,因为 HDFS 尚未完全启动并准备好。我如何以编程方式(理想情况下来自 Bash)判断 HDFS 系统是否已准备好让 HBase 启动,以便我可以等到它准备好?
我尝试使用“hadoop dfsadmin -report”并寻找正确数量的节点,但显然在集群实际准备好之前仍然会返回。
用于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
编辑:正如评论中提到的,根据HADOOP-756,-safemode wait
它本身会等到安全模式关闭。在这种情况下,您可以简单地发出等待,而 while 循环将是不必要的。但是,如果您只想继续尝试一段时间并在 DFS 仍未启动或其他情况下终止进程,那么while
循环可能仍然有用。当我们在设置集群时出错时,我已经看到了这种情况。