主要借助Hadoop JMX 提供的API信息获取信息来判断Namenode的状态,一般使用类似语句
http://namenode.abc.com:50070/jmx?qry=Hadoop:service=NameNode,name=NameNodeStatus
其返回信息如下:
{
"beans" : [ {
"name" : "Hadoop:service=NameNode,name=NameNodeStatus",
"modelerType" : "org.apache.hadoop.hdfs.server.namenode.NameNode",
"State" : "active",
"SecurityEnabled" : false,
"NNRole" : "NameNode",
"HostAndPort" : "vm-9-51-centos:8020",
"LastHATransitionTime" : 1531130404392
} ]
}
可以借助Python代码解析返回信息中的State字段信息,如果为active,就表示为活跃状态,反之则不是,其Python代码的实现可以参考如下
#!/usr/bin/env python
import urllib, json, sys
def get_namenode_status(hostname):
jmxport = 50070
url = "http://{0}:{1}/jmx?qry=Hadoop:service=NameNode,name=NameNodeStatus".format(hostname, jmxport)
try:
response = urllib.urlopen(url)
jsonString = json.load(response)
nnstatus = jsonString.get('beans', [{}])[0].get('State', '')
if 'active' == nnstatus:
return 'active'
elif 'standby' == nnstatus:
return 'standby'
else:
return
except:
return
JMX除了提供namenode状态判断的接口,还有其他信息,详情可见:https://cwiki.apache.org/confluence/display/EAG/Hadoop+JMX+Monitoring+and+Alerting