经常会有一些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. [DS+Algo] 003 一维表结构 Python 代码实现

    接上一篇 前言 本篇共 3 个代码实现 严格来说 code1 相当于模仿了 Python 的 list 的部分简单功能 code2 与 code3 简单实现了"循环单链表"与&qu ...

  2. Python内置函数eval

    英文文档: eval(expression, globals=None, locals=None) The arguments are a string and optional globals an ...

  3. Linux下查看日志用到的常用命令

    杀僵尸进程 部分程序员,肯定喜欢下面命令: ps -ef | grep java (先查java进程ID) kill -9  PID(生产环境谨慎使用) kill.killall.pkill命令的区别 ...

  4. burp intruder模块详解

    0×01 介绍 安装要求: Java 的V1.5 + 安装( 推荐使用最新的JRE ), 可从这里免费 http://java.sun.com/j2se/downloads.html Burp Sui ...

  5. Nginx的端口修改问题

    转自:https://www.cnblogs.com/fengyuhuawu/p/7867728.html 修改 nginx.conf 文件实现. 在 Linux 上该文件的路径为 /usr/loca ...

  6. MongoDB的使用学习之(六)MongoDB的高级查询之条件操作符

    此文分为两点,主要是在第二点--java 语法,但是按顺序必须先把原生态的语法写出来 (还有一篇文章也是不错的:MongoDB高级查询用法大全(包含MongoDB命令语法和Java语法,其实就是我整理 ...

  7. CABasicAnimation animationWithKeyPath Types

    转自:http://www.cnblogs.com/pengyingh/articles/2379631.html CABasicAnimation animationWithKeyPath 一些规定 ...

  8. /proc/sys/fs/file-max

    Linux的/proc/sys/fs/file-max决定了当前内核可以打开的最大的文件句柄数. 查看当前的值: cat /proc/sys/fs/file-max 这个值在kernel的文档里是这样 ...

  9. Linux架构之Nginx 七层负载均衡

    第50章 Nginx七层负载均衡 一.Nginx负载均衡基本概述 1)为什么要使用负载均衡 当我们的Web服务器直接面向用户,往往要承载大量并发请求,单台服务器难以负荷.使用多台Web服务器组成集群, ...

  10. 微信授权获取code/openid

    微信网页授权 如果用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信息,进而实现业务逻辑. 关于网页授权回调域名的说明 1.在微信公众号请求用户网页授权之前,开发者需要 ...