如何检查namenode状态?

m3eecexj  于 2021-05-29  发布在  Hadoop
关注(0)|答案(2)|浏览(1054)

作为开发人员,如何检查给定namenode的当前状态(是活动还是备用)?我尝试过getservicestate命令,但这只适用于具有超级用户访问权限的管理员。可以从边缘节点运行以获取所提供namemnode的状态的任何命令??

bd1hkmkf

bd1hkmkf1#

最后,我得到了答案。
作为开发人员,由于受到限制,无法执行dfsadmin命令。为了检查namenode的可用性,我在shell脚本中使用了下面的if循环。它不会确切地告诉您namenode是活动的,但是通过循环,您可以轻松地相应地执行所需的程序。

if hdfs dfs -test -e hdfs://namenodeip/* ; then
echo exist
else 
echo not exist
fi
pu82cl6c

pu82cl6c2#

我试过你的解决办法,但没用。这是我的一个非常适合我的(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(下面的示例),json有一个状态标志指示其状态。所以我只是在curl请求输出中检查“active”文本。对于任何其他语言,只需执行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"
  } ]
}

相关问题