通過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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM