如何检查namenode状态?

时间:2016-05-17 14:14:29

标签: hadoop hdfs

作为开发人员,如果它是活动还是待机,我如何检查给定Namenode的当前状态?我已经尝试了getServiceState命令,但这仅适用于具有超级用户访问权限的管理员。任何可以从边缘节点运行以获取提供的namemnode状态的命令

2 个答案:

答案 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"
  } ]
}