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、更多表後續繼續調研

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章