日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

storm metric的使用说明

發(fā)布時間:2024/1/23 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 storm metric的使用说明 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

storm metric的使用說明

@(STORM)[storm]

  • storm metric的使用說明
    • 一概述
    • 二使用storm metric的關(guān)鍵步驟
      • 1在bolt的prepare中注冊metric
      • 2在bolt的execute方法中更新metric
      • 3在topo中指定將metric consumer這里使用了storm自帶的consumer將其輸出到日志文件中也可以自定義consumer見下面
      • 4示例程序完整代碼
      • 5輸出示例
    • 三詳細(xì)說明
      • 1metric和metric consumer
      • 2metric
      • 3自帶的Metric實現(xiàn)
      • 4Metric Consumer
      • 5自定義MetricsConsumer
      • 6storm ui的變化
    • 四應(yīng)用場景
      • 1調(diào)試
      • 2監(jiān)控

(一)概述

storm metric類似于hadoop的counter,用于收集應(yīng)用程序中的特定指標(biāo),輸出到外部。在storm中是存儲到各個機器logs目錄下的metric.log文件中。有時我們想保存一些計算的中間變量,當(dāng)達(dá)到一定狀態(tài)時,統(tǒng)一在一個位置輸出,或者統(tǒng)計整個應(yīng)用的一些指標(biāo),metric是個很好的選擇。

(二)使用storm metric的關(guān)鍵步驟

1、在bolt的prepare中注冊metric

transient CountMetric _countMetric; transient MultiCountMetric _wordCountMetric; transient ReducedMetric _wordLengthMeanMetric;void initMetrics(TopologyContext context) {_countMetric = new CountMetric();_wordCountMetric = new MultiCountMetric();_wordLengthMeanMetric = new ReducedMetric(new MeanReducer());context.registerMetric("execute_count", _countMetric, 5);context.registerMetric("word_count", _wordCountMetric, 60);context.registerMetric("word_length", _wordLengthMeanMetric, 60); }

(1)metric都定義為了transient。因為這些Metric實現(xiàn)都沒有實現(xiàn)Serializable,而在storm的spout/bolt中,所有非transient的變量都必須Serializable
(2)三個參數(shù)為metric名稱,metric對象,以及時間間隔。時間間隔表示多久一次metric將數(shù)據(jù)發(fā)送給metric consumer。

2、在bolt的execute方法中更新metric

void updateMetrics(String word) {_countMetric.incr();_wordCountMetric.scope(word).incr();_wordLengthMeanMetric.update(word.length()); }

3、在topo中指定將metric consumer,這里使用了storm自帶的consumer將其輸出到日志文件中,也可以自定義consumer。見下面。

conf.registerMetricsConsumer(LoggingMetricsConsumer.class, 2);

4、示例程序完整代碼

package com.lujinhong.demo.storm.metrics;import java.util.Map;import backtype.storm.Config; import backtype.storm.LocalCluster; import backtype.storm.StormSubmitter; import backtype.storm.metric.LoggingMetricsConsumer; import backtype.storm.metric.api.CountMetric; import backtype.storm.metric.api.MeanReducer; import backtype.storm.metric.api.MultiCountMetric; import backtype.storm.metric.api.ReducedMetric; import backtype.storm.task.OutputCollector; import backtype.storm.task.TopologyContext; import backtype.storm.testing.TestWordSpout; import backtype.storm.topology.OutputFieldsDeclarer; import backtype.storm.topology.TopologyBuilder; import backtype.storm.topology.base.BaseRichBolt; import backtype.storm.tuple.Fields; import backtype.storm.tuple.Tuple; import backtype.storm.tuple.Values; import backtype.storm.utils.Utils;public class ExclamationTopology {public static class ExclamationBolt extends BaseRichBolt {OutputCollector _collector;// 定義指標(biāo)統(tǒng)計對象transient CountMetric _countMetric;transient MultiCountMetric _wordCountMetric;transient ReducedMetric _wordLengthMeanMetric;@Overridepublic void prepare(Map conf, TopologyContext context,OutputCollector collector) {_collector = collector;initMetrics(context);}@Overridepublic void execute(Tuple tuple) {_collector.emit(tuple, new Values(tuple.getString(0) + "!!!"));_collector.ack(tuple);updateMetrics(tuple.getString(0));}@Overridepublic void declareOutputFields(OutputFieldsDeclarer declarer) {declarer.declare(new Fields("word"));}// 初始化計數(shù)器void initMetrics(TopologyContext context) {_countMetric = new CountMetric();_wordCountMetric = new MultiCountMetric();_wordLengthMeanMetric = new ReducedMetric(new MeanReducer());context.registerMetric("execute_count", _countMetric, 5);context.registerMetric("word_count", _wordCountMetric, 60);context.registerMetric("word_length", _wordLengthMeanMetric, 60);}// 更新計數(shù)器void updateMetrics(String word) {_countMetric.incr();_wordCountMetric.scope(word).incr();_wordLengthMeanMetric.update(word.length());}}public static void main(String[] args) throws Exception {TopologyBuilder builder = new TopologyBuilder();builder.setSpout("word", new TestWordSpout(), 10);builder.setBolt("exclaim1", new ExclamationBolt(), 3).shuffleGrouping("word");builder.setBolt("exclaim2", new ExclamationBolt(), 2).shuffleGrouping("exclaim1");Config conf = new Config();conf.setDebug(true);// 輸出統(tǒng)計指標(biāo)值到日志文件中conf.registerMetricsConsumer(LoggingMetricsConsumer.class, 2);if (args != null && args.length > 0) {conf.setNumWorkers(3);StormSubmitter.submitTopology(args[0], conf,builder.createTopology());} else {LocalCluster cluster = new LocalCluster();cluster.submitTopology("test", conf, builder.createTopology());Utils.sleep(10000);cluster.killTopology("test");cluster.shutdown();}} }

5、輸出示例

2015-11-05 14:31:06,801 38311 1446705066 gdc-storm11-storm.i.nease.net:6727 8:exclaim1 execute_count 165 2015-11-05 14:31:06,835 38345 1446705066 gdc-storm08-storm.i.nease.net:6727 6:exclaim1 execute_count 165 2015-11-05 14:31:11,801 43311 1446705071 gdc-storm11-storm.i.nease.net:6727 8:exclaim1 execute_count 166 2015-11-05 14:31:11,835 43345 1446705071 gdc-storm08-storm.i.nease.net:6727 9:exclaim2 execute_count 2502015-11-05 14:32:32,391 123901 1446705152 gdc-storm08-storm.i.nease.net:6727 6:exclaim1 word_length 5.852204408817635 2015-11-05 14:33:32,373 183883 1446705212 gdc-storm11-storm.i.nease.net:6727 8:exclaim1 word_length 5.797094188376754 2015-11-05 14:33:32,391 183901 1446705212 gdc-storm08-storm.i.nease.net:6727 6:exclaim1 word_length 5.7766064257028112015-11-05 14:31:32,374 63884 1446705092 gdc-storm11-storm.i.nease.net:6727 8:exclaim1 word_count {bertels=413, jackson=354, nathan=432, mike=380, golda=412} 2015-11-05 14:31:32,391 63901 1446705092 gdc-storm08-storm.i.nease.net:6727 6:exclaim1 word_count {bertels=374, jackson=396, nathan=411, mike=416, golda=392} 2015-11-05 14:31:32,404 63914 1446705092 gdc-storm08-storm.i.nease.net:6727 9:exclaim2 word_count {bertels!!!=593, golda!!!=615, jackson!!!=571, nathan!!!=646, mike!!!=562}

(三)詳細(xì)說明

1、metric和metric consumer

storm中關(guān)于metric的API主要有2部分:metric和metric consumer。前者用于生成一些統(tǒng)計值,后者將其處理后輸出。更詳細(xì)請見下面。

2、metric

(1)metric在用于在spout/bolt中收集度量值。
(2)metric通過TopologyContext.registerMetric(…)來注冊到相應(yīng)的spout或者bolt中,一般是在prepare/open方法中注冊metric,然后在execute方法中更新metric值。
(3)Metric必須實現(xiàn)backtype.storm.metric.api.IMetric接口。

3、自帶的Metric實現(xiàn)

storm提供了幾個常用的metric實現(xiàn):
AssignableMetric – set the metric to the explicit value you supply. Useful if it’s an external value or in the case that you are already calculating the summary statistic yourself. Note: Useful for statsd Gauges.

CombinedMetric – generic interface for metrics that can be updated associatively.

CountMetric – a running total of the supplied values. Call incr() to increment by one, incrBy(n) to add/subtract the given number.
Note: Useful for statsd counters.

MultiCountMetric– a hashmap of count metrics. Note: Useful for many Counters where you may not know the name of the metric a priori or where creating many Counter’s manually is burdensome.

MeanReducer – an implementation of ReducedMetric that tracks a running average of values given to its reduce() method. (It accepts Double, Integer or Long values, and maintains the internal average as a Double.) Despite his reputation, the MeanReducer is actually a pretty nice guy in person.

4、Metric Consumer

(1)MetricsConsumer用于收集拓?fù)渲凶缘乃蠱etric,并進(jìn)行處理、輸出等。處理的對象為DataPoint類的對象,同時包括了一些額外信息,如worker主機,worker端口,組件ID,taskID,時間戳,更新周期等。
(2)MetricsConsumer使用backtype.storm.Config.registerMetricsConsumer(…)在創(chuàng)建topo時注冊,或者在storm的配置文件中指定topology.metrics.consumer.register。
(3)MetricsConsumer必須實現(xiàn)backtype.storm.metric.api.IMetricsConsumer接口。

5、自定義MetricsConsumer

上面例子中的

conf.registerMetricsConsumer(LoggingMetricsConsumer.class, 2);

其中LoggingMetricsConsumer是由系統(tǒng)提供的類,它將內(nèi)容寫入metrics.log文件中,格式可參考上面的輸出。
如果對輸出有特殊要求,比如要將日志輸出到其它地方,或者是輸出的內(nèi)容不同,可以自定義一個consumer。例如:

public class MonitorKafkaLogConsumer implements IMetricsConsumer {public static final Logger LOG = LoggerFactory .getLogger(MonitorKafkaLogConsumer.class);@Override public void prepare(Map stormConf, Object registrationArgument,TopologyContext context, IErrorReporter errorReporter) {}@Override public void handleDataPoints(TaskInfo taskInfo, Collection<DataPoint> dataPoints) {StringBuilder sb = new StringBuilder();for (DataPoint p : dataPoints) {sb.append(p.name).append(":").append(p.value);LOG.info(sb.toString()); }}@Overridepublic void cleanup() {}}

6、storm ui的變化

在storm的UI中會有一個metric的節(jié)點,它與所有的節(jié)點都有交集。
沒有metric的情況:

加上metric的情況:

(四)應(yīng)用場景

1、調(diào)試

將一些調(diào)整級別的信息輸出到metric中,以協(xié)助定位分析問題

2、監(jiān)控

將一些核心指標(biāo)定期輸出到外部系統(tǒng),如監(jiān)控系統(tǒng),當(dāng)發(fā)生異常時自動報警。

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結(jié)

以上是生活随笔為你收集整理的storm metric的使用说明的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 超碰91在线观看 | 亚洲一区二区三区色 | 亚洲精品国产无码 | 玩弄白嫩少妇xxxxx性 | 日韩无遮挡 | 亚洲一区欧美激情 | 国产剧情在线一区 | 国产亚洲激情 | www中文字幕在线观看 | 三级黄色片免费 | 国产午夜精品一区 | 亚洲欧美天堂网 | 波多野结衣激情视频 | 日韩专区在线 | 久久久久久国产精品无码 | 一二三区精品 | 天天爽天天| 在线免费毛片 | 水蜜桃91| 日本不卡高字幕在线2019 | 伊人影视久久 | 亚洲aⅴ乱码精品成人区 | 五月综合色 | 久久不卡日韩美女 | 日本一区二区欧美 | 精品欧美一区二区三区成人 | 国产成人精品亚洲日本在线观看 | 亚洲 自拍 另类 欧美 丝袜 | 在线天堂中文 | 好吊操视频这里只有精品 | 黄色视屏在线 | 国产精品久久久久aaaa | 国内av自拍| 尹人在线视频 | 永久免费无码av网站在线观看 | 五月激情小说 | 少妇被中出 | 久久毛片网 | 在线观看免费高清在线观看 | 国模小丫大尺度啪啪人体 | 欧美精品久久久久久久自慰 | 国产高清一 | 人人爽人人干 | 人人玩人人弄 | 免费久久一级欧美特大黄 | 亚洲第一精品网站 | www.久久久| 国产经典自拍 | 中国女人特级毛片 | 视频福利在线 | av在线免费播放网址 | 日韩精品久久一区二区 | 91精品啪| 美女三级黄色片 | a一级黄色 | av男人的天堂在线观看 | 吊侵犯の奶水授乳羞羞漫画 | 一本大道久久a久久综合婷婷 | 邻居交换做爰2 | 熟女丝袜一区 | 一区二区在线免费 | 亚洲熟妇无码乱子av电影 | 久久精品国产精品亚洲色婷婷 | 国产伦精品一区二区三 | 亚洲精品欧洲 | 性做久久久 | 免费一区二区三区四区 | 黄色av免费| 中文字字幕一区二区三区四区五区 | 亚洲精品美女视频 | 羞羞动态图 | 波多野结衣中文一区 | 欧美精品福利视频 | 天堂999| 亚州黄色 | 日韩少妇内射免费播放 | 天天射天天干天天舔 | 欧美偷拍综合 | 精品成人av一区二区在线播放 | 九九亚洲 | 亚洲色图吧 | 一级全黄男女免费大片 | 黄色网页免费在线观看 | 国产乱性 | 日韩欧美网站 | 久久综合色88 | videos另类灌满极品另类 | 午夜私人影院 | 亚州av网| 一区二区三区四区精品视频 | 麻豆亚洲av熟女国产一区二 | 国产又黄又粗又猛又爽 | 天天干天天拍 | 成人视品 | 亚洲精品久久一区二区三区777 | 久久精品国产av一区二区三区 | 无码人妻aⅴ一区二区三区日本 | 风间由美一区二区三区 | 黄色国产大片 |