ams-hbase调研

Ambari-metric架构源码整理

在ambari,hdp升级测试过程中发现后台任务执行完毕了,但是前台进度条未完成,特此分析ambari-metrics模块代码

1、Collector

Ambari中的Collector是其内置的角色,主要提供两个功能,一方面将 Metrics Monitor 和 Metrics Sink 汇报上来的监控信息存储到 HBase 中,另一方面提供监控信息查询接口,供 Ambari Server 进行查询。 其角色功能在Ambari设计中的功能如下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-F7PnEe7h-1593314211180)(C:\Users\lenovo\Desktop\MarkDown\Ambari-metric.assets\image-20200628100408193.png)]

2、metrics collector和metrics system区别

  • Metrics Collector:如上所述,主要提供两个功能,一方面将 Metrics Monitor 和 Metrics Sink 汇报上来的监控信息存储到 HBase 中,另一方面提供监控信息查询接口,供 Ambari Server 进行查询。

  • Ambari Metrics System (“AMS”):
    The built-in metrics collection system for Ambari.,意为Ambari内置的指标系统

  • metrics system 每个Hadoop的进程也都内置这么一个metrics system角色,主要是收集指标数据并转发等处理,ambari中的MetricsSystem主要作用是用于接收Hadoop等sink发送的数据

3、Ambari-Metrics代码结构介绍

ambari-metrics-host-monitoring 主要负责主机监控,通过python实现,主要 psutil库
ambari-metrics-grafana Grafana 是 Graphite 和 InfluxDB 仪表盘和图形编辑器。主要处理图标显示。
ambari-metrics-hadoop-sink 主要处理hadoop的数据采集,并将采集的数据发送给collector。
ambari-metrics-timelineservice 主要负责数据聚合,数据存储,数据查询,为总入口。

4、ambari的metrics collector初始化流程

org.apache.hadoop.metrics2.sink.timeline.HadoopTimelineMetricsSink#init

  • 获取hostname
    通过MetricCollectorHAHelper 根据集群的存储模式,选择zk里保存的collector链接

  • 获取serviceName
    LOG.info("Identified hostname = " + hostName + ", serviceName = " + serviceName);

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IL8zJCzn-1593314211185)(C:\Users\lenovo\Desktop\MarkDown\Ambari-metric.assets\image-20200628102708582.png)]

  • 初始化collector写入策略

        // Initialize the collector write strategy
        super.init();
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5uRrOrWQ-1593314211187)(C:\Users\lenovo\Desktop\MarkDown\Ambari-metric.assets\image-20200628102816968.png)]

  • 加载collector配置(协议、主机、端口)

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2BH6RRha-1593314211190)(C:\Users\lenovo\Desktop\MarkDown\Ambari-metric.assets\image-20200628102916718.png)]

  • 判断主机是否为空

  • 判断协议是否https,是的话加载相应认证配置
    构造collectorUri和containerMetricsUri

  • 打印地址

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iXZIuza5-1593314211191)(C:\Users\lenovo\Desktop\MarkDown\Ambari-metric.assets\image-20200628103136771.png)]

  • 读取metricsCache配置并构造metricsCache

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nJoIWF7p-1593314211192)(C:\Users\lenovo\Desktop\MarkDown\Ambari-metric.assets\image-20200628103154008.png)]

  • 读取tag配置并过滤对应的key
    如果有指定rpc端口进行设定

     Iterator<String> it = (Iterator<String>) conf.getKeys();
        while (it.hasNext()) {
          String propertyName = it.next();
          if (propertyName != null) {
            if (propertyName.startsWith(TAGS_FOR_PREFIX_PROPERTY_PREFIX)) {
              String contextName = propertyName.substring(TAGS_FOR_PREFIX_PROPERTY_PREFIX.length());
              String[] tags = conf.getStringArray(propertyName);
              boolean useAllTags = false;
              Set<String> set = null;
              if (tags.length > 0) {
                set = new HashSet<String>();
                for (String tag : tags) {
                  tag = tag.trim();
                  /*
                  |=:两个二进制对应位都为0时,结果等于0,否则结果等于1;----按位或
    
                  &=:两个二进制的对应位都为1时,结果为1,否则结果等于0;----按位与
    
                  ^=:两个二进制的对应位相同,结果为0,否则结果为1。-------- 按位异或
                  */
                  useAllTags |= tag.equals("*");
                  if (tag.length() > 0) {
                    set.add(tag);
                  }
                }
                if (useAllTags) {
                  set = null;
                }
              }
              useTagsMap.put(contextName, set);
            }
            // Customized RPC ports
            if (propertyName.startsWith(RPC_METRIC_PREFIX)) {
              // metric.rpc.client.port
              int beginIdx = RPC_METRIC_PREFIX.length() + 1;
              String suffixStr = propertyName.substring(beginIdx); // client.port
              String configPrefix = suffixStr.substring(0, suffixStr.indexOf(".")); // client
              rpcPortSuffixes.put(conf.getString(propertyName).trim(), configPrefix.trim());
            }
          }
        }
    
        if (!rpcPortSuffixes.isEmpty()) {
          LOG.info("RPC port properties configured: " + rpcPortSuffixes);
        }
    

    启动startWebApp(实际是一个jetty的http server

    在如下类中

    org.apache.hadoop.yarn.server.applicationhistoryservice.ApplicationHistoryServer#startWebApp

5、AMS-Hbase

5.1、tables

默认命名空间default

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-e8GTO8tj-1593314211193)(C:\Users\lenovo\Desktop\MarkDown\Ambari-metric.assets\image-20200628105501041.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zXDV8EBi-1593314211194)(C:\Users\lenovo\Desktop\MarkDown\Ambari-metric.assets\image-20200628110812827.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MwqZJEc9-1593314211195)(C:\Users\lenovo\Desktop\MarkDown\Ambari-metric.assets\image-20200628110827299.png)]

5.2、METRIC_RECORD表

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-S6zl17oU-1593314211196)(C:\Users\lenovo\Desktop\MarkDown\Ambari-metric.assets\image-20200628110912474.png)]

该表是所有表中唯一存储实际metrics数据的表,其它表都是在此表的基础之上进行时间段的相应统计。

  • 针对采集的hosts指标,即由monitor发送的指标值
  • 针对采集的hadoopsink指标

5.3、更多表后续继续调研

猜你喜欢

转载自blog.csdn.net/qq_37865420/article/details/106995284