通过Hadoop jmx收集Namenode,Jobtracker相关信息
经常会有一些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相关信息的更多相关文章
- Hadoop NameNode元数据相关文件目录解析
在<Hadoop NameNode元数据相关文件目录解析>文章中提到NameNode的$dfs.namenode.name.dir/current/文件夹的几个文件: 1 current/ ...
- 【Hadoop代码笔记】Hadoop作业提交之JobTracker等相关功能模块初始化
一.概要描述 本文重点描述在JobTracker一端接收作业.调度作业等几个模块的初始化工作.想过模块的介绍会在其他文章中比较详细的描述.受理作业提交在下一篇文章中会进行描述. 为了表达的尽可能清晰一 ...
- hadoop源代码解读namenode高可靠:HA;web方式查看namenode下信息;dfs/data决定datanode存储位置
点击browserFilesystem,和命令查看结果一样 当我们查看hadoop源代码时,我们看到hdfs下的hdfs-default.xml文件信息 我们查找${hadoop.tmp.dir}这是 ...
- Hadoop:HDFS NameNode内存全景
原文转自:https://tech.meituan.com/namenode.html 感谢原作者 一.概述 从整个HDFS系统架构上看,NameNode是其中最重要.最复杂也是最容易出现问题的地方, ...
- Hadoop优势,组成的相关架构,大数据生态体系下的模式
Hadoop优势,组成的相关架构,大数据生态体系下的模式 一.Hadoop的优势 二.Hadoop的组成 2.1 HDFS架构 2.2 Yarn架构 2.3 MapReduce架构 三.大数据生态体系 ...
- Hadoop记录-Hadoop jmx
https://cwiki.apache.org/confluence/display/EAG/Hadoop+JMX+Monitoring+and+Alerting curl http://10.11 ...
- 启动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一直 ...
- 【Hadoop】Seondary NameNode不是备份NameNode!!
昨天和舍友聊天时无意中提起Secondary NameNode,他说这是备用NameNode.我当时就有点疑惑..之后查阅了相关资料和博客,算是基本理解了什么是Secondary NameNode. ...
- 收集一些java相关的文章
有些文章看了,以后想再看已经忘了在哪里了.故在此一一记录下那些值得看的文章. 1:如何确定Java对象的大小 中文版本 :http://article.yeeyan.org/view/104091/6 ...
随机推荐
- 【Linux 架构】Linux内核架构
(1)System Call Interface(SCI)------系统调用接口(2)Process Management(PM)-------进程管理模块(3)Memory Management( ...
- CentOS 7.6 RPM 方式安装Oracle19c 后 使用 systemd 的方式设置开机自动启动Oracle数据库
1. 方法简介: 使用systemd 来进行 oracle数据库的启动和关闭操作. 使用的脚本为 lsnrctl和dbstart 2. 修改事项. 需要先修改一下 oracle 的启动脚本配置: vi ...
- 极*Java速成教程 - (8)
Java高级特性 注解 注解可以在代码之外添加更多的信息,更加完整地描述程序,帮助编译器进行工作,或者实现某些特定的Java代码之外的功能. 注解可以简化某些重复的流程,自动化那些过程. 注解的使用 ...
- Django @csrf_exempt不适用于基于通用视图的类(Django @csrf_exempt does not work on generic view based class)
class ChromeLoginView(View): def get(self, request): return JsonResponse({'status': request.user.is_ ...
- P2220 [HAOI2012]容易题
传送门 首先 $(\sum_{i=1}^{n}a_i)(\sum_{i=1}^{m}b_i)$ 展开以后包含了所有 $ab$ 两两相乘的情况并且每种组合只出现一次 发现展开后刚好和题目对序列价值的定义 ...
- 错误: JMX 连接器服务器通信错误: service:jmx:rmi://***
电脑没有空间了,正想清理一下硬盘空间,这时不知道金山毒霸啥时候装上了,就想把它卸载了,卸载的过程中看到有空间清理,随手一点,清理出了10个G,然后再打开idea运行项目就报出这个错. 错误: JMX ...
- django的模板的继承与导入
1.模板继承 母版中需要继承的地方: {% block content %} {% endblock %} 对应的子版中文件最开头写: {% extends 'head_demo.html' %} 然 ...
- 网络爬虫之JSOUP
JSOUP中文文档:http://www.open-open.com/jsoup/推荐博客:http://www.cnblogs.com/jycboy/p/jsoupdoc.html 从一个URL加载 ...
- Bootstrap table 实现树形表格,实现联动选中,联动取消
公司最近有需求要做树形式table.因为是前后端不分离项目,且之前已经引入了bootstrap table插件,现把实现方式分享一下: <!DOCTYPE HTML> <html l ...
- CSS链接使用伪类的顺序
顺序为:link-visited-hover-active a:link {color: #FF0000} /* 未访问的链接 */ a:visited {color: #00FF00} /* 已访问 ...