Hadoop集群的监控可以通过多种方式来实现(比如REST API、jmx、内置API等等)。虽然监控方式有多种,但是我们需要根据监控的指标选择不同的监控方式,比如如果你想监控作业的情况,那么你选择jmx是不能满足的;你想监控各节点的运行情况,REST API也是不能满足的。所以在选择不同当时监控时,我们需要详细了解需要我们的需求。
Hadoop的jmx提供了诸如Cluster、Queue、Jvm、FSQueue等Metrics信息,而且获取它也是非常地方便。比如想获取YARN相关的jmx,我们可以在浏览器输入
https://host:port/jmx即可获取一堆Jmx信息;同理,如果想获取NameNode的jmx可以输入https://host:50070/jmx。
/jmx这个URL是通过org.apache.hadoop.jmx.JMXJsonServlet类实现的。一般情况下所有使用HttpServer启动服务都可以访问http://…/jmx链接。这个Servlet仅仅提供了JMX metrics只读权限。为了方便,这里只介绍YARN的jmx。
默认情况下只输入https://www.iteblog.com:8088/jmx将返回所有关于YARN的Metrics信息,并且是以Json格式返回的。org.apache.hadoop.jmx.JMXJsonServlet类的代码如下所示:
public class JMXJsonServlet extends HttpServlet {
private static final String CALLBACK_PARAM = "callback";
protected transient MBeanServer mBeanServer = null;
@Override
public void init() throws ServletException {
mBeanServer = ManagementFactory.getPlatformMBeanServer();
}
protected boolean isInstrumentationAccessAllowed(HttpServletRequest request,
HttpServletResponse response) throws IOException {
return HttpServer2.isInstrumentationAccessAllowed(getServletContext(),
request, response);
}
@Override
public void