作为开发人员,如何检查给定namenode的当前状态(是活动还是备用)?我尝试过getservicestate命令,但这只适用于具有超级用户访问权限的管理员。可以从边缘节点运行以获取所提供namemnode的状态的任何命令??
bd1hkmkf1#
最后,我得到了答案。作为开发人员,由于受到限制,无法执行dfsadmin命令。为了检查namenode的可用性,我在shell脚本中使用了下面的if循环。它不会确切地告诉您namenode是活动的,但是通过循环,您可以轻松地相应地执行所需的程序。
if hdfs dfs -test -e hdfs://namenodeip/* ; then echo exist else echo not exist fi
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" } ] }
2条答案
按热度按时间bd1hkmkf1#
最后,我得到了答案。
作为开发人员,由于受到限制,无法执行dfsadmin命令。为了检查namenode的可用性,我在shell脚本中使用了下面的if循环。它不会确切地告诉您namenode是活动的,但是通过循环,您可以轻松地相应地执行所需的程序。
pu82cl6c2#
我试过你的解决办法,但没用。这是我的一个非常适合我的(bash脚本)。
说明:
运行这个curl请求将namenode的状态输出为json(下面的示例),json有一个状态标志指示其状态。所以我只是在curl请求输出中检查“active”文本。对于任何其他语言,只需执行curl请求并检查其输出。