经常会有一些Hadoop监控的需求,例如datanode节点掉线,Tasktracker blacklist的数量,以及Namenode,Jobtracker的内存GC信息等。

之前采用Hadoop API获取这类信息插入Mysql,再用php脚本做逻辑判断并发送报警。这种做法代价比较高,需要在每个集群部署一个java用以收集信息。

后来发现hadoop提供了一个JMX的json数据接口,可以比较方便的得到这些信息。只需在页面上便可访问到,例如namenode

只需要将http://namenode:50070/dfshealth.jsp换成http://namenode:50070/jmx即可,收集到的json信息类似这样:

{
name: "java.lang:type=Memory",
modelerType: "sun.management.MemoryImpl",
Verbose: true,
HeapMemoryUsage: {
committed: 58680999936,
init: 0,
max: 58680999936,
used: 36259957544
},
NonHeapMemoryUsage: {
committed: 49778688,
init: 24313856,
max: 136314880,
used: 32792624
},
ObjectPendingFinalizationCount: 0
},

包含namenode各种详细的信息,包括内存相关,GC,活动的节点,空间使用等等。

由于信息比较多,也提供了一个qry=name的方式获取具体某一项所需的数据,例如:

http://namenode:50070/jmx?qry=hadoop:service=NameNode,name=NameNodeInfo 只收集nameinfo相关的数据。

顺便提供一下php解析这些数据的方法:

<?php

$domain="namenode.hadoop.domain";
#解析namenode info数据
$nameurl="http://".$domain.":50070/jmx?qry=hadoop:service=NameNode,name=NameNodeInfo";
#parser json data to array from nameurl
$namejson=(json_decode(file_get_contents($nameurl),true));
$namebeans=$namejson["beans"];
$NameInfo=$namebeans[0];
#parser nodes to array and count livenode,deadnode,decomnode.
$LiveNodes=(json_decode($NameInfo["LiveNodes"],true));
$LiveNodesCount=count($LiveNodes);
$DeadNodes=(json_decode($NameInfo["DeadNodes"],true));
$DeadNodesCount=count($DeadNodes);
$DecomNodes=(json_decode($NameInfo["DecomNodes"],true));
$DecomNodesCount=count($DecomNodes);
$HostName=$NameInfo["HostName"];
$Used=$NameInfo["Used"];
$Total=$NameInfo["Total"];
$PercentUsed=$NameInfo["PercentUsed"];
$TotalBlocks=$NameInfo["TotalBlocks"];
$TotalFiles=$NameInfo["TotalFiles"];

#解析jobtracker数据

$joburl="http://".$domain.":50030/jmx?qry=hadoop:service=JobTracker,name=JobTrackerInfo";
$jobjson=(json_decode(file_get_contents($joburl),true));
$jobbeans=$jobjson["beans"];
$JobInfo=$jobbeans[0];
$SummaryJson=(json_decode($JobInfo["SummaryJson"],true));
$nodes=$SummaryJson["nodes"];
$alive=$SummaryJson["alive"];
$blacklisted=$SummaryJson["blacklisted"];
$jobs=$SummaryJson["jobs"];
$slots=$SummaryJson["slots"];
$map_slots=$slots["map_slots"];
$map_slots_used=$slots["map_slots_used"];
$reduce_slots=$slots["reduce_slots"];
$reduce_slots_used=$slots["reduce_slots_used"];

?>

参考:http://slaytanic.blog.51cto.com/2057708/1179108

通过Hadoop jmx收集Namenode,Jobtracker相关信息的更多相关文章

  1. Hadoop NameNode元数据相关文件目录解析

    在<Hadoop NameNode元数据相关文件目录解析>文章中提到NameNode的$dfs.namenode.name.dir/current/文件夹的几个文件: 1 current/ ...

  2. 【Hadoop代码笔记】Hadoop作业提交之JobTracker等相关功能模块初始化

    一.概要描述 本文重点描述在JobTracker一端接收作业.调度作业等几个模块的初始化工作.想过模块的介绍会在其他文章中比较详细的描述.受理作业提交在下一篇文章中会进行描述. 为了表达的尽可能清晰一 ...

  3. hadoop源代码解读namenode高可靠:HA;web方式查看namenode下信息;dfs/data决定datanode存储位置

    点击browserFilesystem,和命令查看结果一样 当我们查看hadoop源代码时,我们看到hdfs下的hdfs-default.xml文件信息 我们查找${hadoop.tmp.dir}这是 ...

  4. Hadoop:HDFS NameNode内存全景

    原文转自:https://tech.meituan.com/namenode.html 感谢原作者 一.概述 从整个HDFS系统架构上看,NameNode是其中最重要.最复杂也是最容易出现问题的地方, ...

  5. Hadoop优势,组成的相关架构,大数据生态体系下的模式

    Hadoop优势,组成的相关架构,大数据生态体系下的模式 一.Hadoop的优势 二.Hadoop的组成 2.1 HDFS架构 2.2 Yarn架构 2.3 MapReduce架构 三.大数据生态体系 ...

  6. Hadoop记录-Hadoop jmx

    https://cwiki.apache.org/confluence/display/EAG/Hadoop+JMX+Monitoring+and+Alerting curl http://10.11 ...

  7. 启动HDFS之后一直处于安全模式org.apache.hadoop.hdfs.server.namenode.SafeModeException: Log not rolled. Name node is in safe mode.

    一.现象 三台机器 crxy99,crxy98,crxy97(crxy99是NameNode+DataNode,crxy98和crxy97是DataNode) 按正常命令启动HDFS之后,HDFS一直 ...

  8. 【Hadoop】Seondary NameNode不是备份NameNode!!

    昨天和舍友聊天时无意中提起Secondary NameNode,他说这是备用NameNode.我当时就有点疑惑..之后查阅了相关资料和博客,算是基本理解了什么是Secondary NameNode. ...

  9. 收集一些java相关的文章

    有些文章看了,以后想再看已经忘了在哪里了.故在此一一记录下那些值得看的文章. 1:如何确定Java对象的大小 中文版本 :http://article.yeeyan.org/view/104091/6 ...

随机推荐

  1. 【监控实践】【4.1】利用trace实现阻塞跟踪和慢查询跟踪

    原文:https://blog.csdn.net/kk185800961/article/details/49252037 分享个SQLServer profiler 的一个技巧吧.很早用过,忘记总结 ...

  2. oracle 实现mysql find_set_in函数

    create or replace FUNCTION F_FIND_IN_SET(piv_str1 varchar2, piv_str2 varchar2, p_sep varchar2 := ',' ...

  3. java基础笔记(7)

    Socket编程 通信基础:ip地址(位置).协议(语言).端口(软件程序): java提供网络功能的四大类: InetAddress没有构造函数,不够里面有一些方法是可以返回实例,如: InetAd ...

  4. E - 盒子游戏

    有两个相同的盒子,其中一个装了n个球,另一个装了一个球.Alice和Bob发明了一个游戏,规则如下:Alice和Bob轮流操作,Alice先操作每次操作时,游戏者先看看哪个盒子里的球的数目比较少,然后 ...

  5. Linux命令(持续更新)

    1. tail 命令    tail 命令可用于查看文件的内容,有一个常用的参数 -f 常用于查阅正在改变的日志文件. tail  -f  filename 会把 filename 文件里的最尾部的内 ...

  6. iOS微信浏览器回退不刷新(监听浏览器回退事件)

    兼容性:兼容全部ios系统 $(function(){ pushHistory(); }); function pushHistory(){ window.addEventListener(" ...

  7. 录屏状态监听之防录屏 - iOS

    继之前接到电话.短信和截屏监听需求之后,在 iOS 11.0 系统之上新增了屏幕录制的新功能玩法,所以也随之迎来了新的屏幕录制监听的需求,即防录屏功能监听 ... 通过官方文档得知 capturedD ...

  8. IDEA tomcat热部署方法

    项目开发过程中,我们一般希望在修改完代码之后不重启项目即可提现出修改的结果,那么热部署项目就显得十分必要了.在idea中将项目热部署至tomcat中的方法如下: 首先打开tomcat配置界面,在ser ...

  9. lmhosts - samba的NetBIOS主机列表文件

    lmhosts是一个samba的NetBIOS名字到IP地址映射文件. 描述 此文件是samba套件的一部分. lmhosts是一个samba的NetBIOS名字到IP地址映射文件.它与/etc/ho ...

  10. verilog中的timescale

    `timescale是Verilog HDL 中的一种时间尺度预编译指令,它用来定义模块的仿真 时的时间单位和时间精度.格式如下: `timescale  仿真时间单位/时间精度 注意:,不能为其它的 ...