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

  • 相关阅读:
    lower_bound和upper_bound
    memcache教程
    php header() 函数
    修复TortoiseGit文件夹和文件图标不显示
    mysql数据类型
    PDO类PDO、PDOStatement、PDOException
    mysqli和pdo对mysql数据库的操作
    php 关键字
    几个入口文件定义函数
    php --魔术常量 /魔术方法
  • 原文地址:https://www.cnblogs.com/wangxiaowei/p/3315056.html
Copyright © 2011-2022 走看看