作为开发人员,如果它是活动还是待机,我如何检查给定Namenode的当前状态?我已经尝试了getServiceState命令,但这仅适用于具有超级用户访问权限的管理员。任何可以从边缘节点运行以获取提供的namemnode状态的命令
答案 0 :(得分:4)
最后,我得到了答案。
作为开发人员,由于限制,无法执行dfsadmin命令。为了检查namenode的可用性,我在shellcript中使用了以下if循环来完成这个操作。它不会告诉你namenode是否处于活动状态,但通过循环,您可以相应地轻松执行所需的程序。
if hdfs dfs -test -e hdfs://namenodeip/* ; then
echo exist
else
echo not exist
fi
答案 1 :(得分:0)
我尝试了你的解决方案但是没有用。这是我的完美适合我(bash脚本)。
until curl http://<namenode_ip>:50070/jmx?qry=Hadoop:service=NameNode,name=NameNodeStatus|grep -q 'active'; do
printf "Waiting for namenode!"
sleep 5
done
说明:
运行此curl请求会将namenode的状态输出为json(下面的示例),该状态具有指示其状态的State标志。所以我只是在curl请求输出中检查'活动'文本。对于任何其他语言,您只需要执行卷曲请求并检查其输出。
{
"beans" : [ {
"name" : "Hadoop:service=NameNode,name=NameNodeStatus",
"modelerType" : "org.apache.hadoop.hdfs.server.namenode.NameNode",
"NNRole" : "NameNode",
"HostAndPort" : "<namenode_ip>:8020",
"SecurityEnabled" : false,
"LastHATransitionTime" : 0,
"State" : "active"
} ]
}