zoukankan      html  css  js  c++  java
  • 通过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

  • 相关阅读:
    leetcode 673. 最长递增子序列的个数 java
    leetcode 148. 排序链表 java
    leetcode 98. 验证二叉搜索树 java
    leetcode 29. 两数相除 java
    leetcode 234. 回文链表 java
    Valid Palindrome LeetCode Java
    Single Number II LeetCode Java
    Single Number LeetCode java
    Search in Rotated Sorted Array II LeetCode Java
    Search in Rotated Sorted Array leetcode java
  • 原文地址:https://www.cnblogs.com/wangxiaowei/p/3315056.html
Copyright © 2011-2022 走看看