Hadoop Metrics体系分析之三:构建自己的Metrics

标签: 测试工具 | 发表时间:2011-12-21 08:38 | 作者:shenxiu
出处:http://qa.taobao.com

大型分布式系统中需要metrics来了解系统状态已成为系统必需的功能之一。其实测试系统甚至测试用例中也同样需要metrics。通过这些指标我们可以了解测试的进度、状况、以及一些过程情况,比如性能指标和一些无法用是否判断数据。下面我们就用一个简单的例子来看看如何使用hadoop metrics。

创建Updater

Updater是一个拥有doUpdates方法的接口,将实现了这个接口的类注册到MetricsContext中,context就能周期性的调用doUpdates来收集metrics。因此实现Updater是metrics框架应用中最重要的事情。下面是一个简单的Updater:



public class ClientMetrics  implements Updater {

   private MetricsContext context;
   private MetricsRegistry registry =  new MetricsRegistry();
   private MetricsRecord metricsRecord;
   private  long lastUpdate = System.currentTimeMillis();

  // 建立一个metrics用于统计1秒内的写请求数
   private final MetricsRate writeRequests =  new MetricsRate("writeRequests",
      registry);

   public ClientMetrics() {
    // 获取一个名为test-client的context,并启动context的monitor线程开始收集数据
    context = MetricsUtil.getContext("test-client");
    // 在context中新建一个名为metrics的record
    metricsRecord = MetricsUtil.createRecord(context, "metrics");
    // 将updater注册到context中
    context.registerUpdater( this);
  }

  @Override
  // context采集metrics数据
   public  void doUpdates(MetricsContext context) {
     synchronized ( this) {
      // 将一个metrics 写入record
       this.writeRequests.pushMetric( this.metricsRecord);
    }
    
    // 将record的数据更新到context
     this.metricsRecord.update();
  }

   public  void incrementWriteRequests( final  int inc) {
     this.writeRequests.inc(inc);
  }

   public  void stop() {
     if (context !=  null) {
      // 停止一个context
      metricsRecord.remove();
      context.close();
      context =  null;
    }
  }
}

创建配置文件

配置文件的名称通常为hadoop-metrics.properties,需要放置在classpath中:

test-client.class=org.apache.hadoop.metrics.ganglia.GangliaContext31
test-client.period=15
test-client.servers= hostname:8649

通过以上的操作,配合ganglia,metrics模块就可以运行起来了,这也是最常用的方式,但是也存在着很多不方便的地方。下面就分享下我们metrics应用的一些经验。

数据收集完成之后

Hadoop metrics框架以及Ganglia很好的完成了数据的采集和集群规模的收集工作。但是也有很多让我们不爽的地方:

1、  ganglia仅能按照1小时、1天、1周、1年来浏览数据,显然无法做进一步的分析处理。为了满足我们随意时间查询以及多重数据整合分析的需求,必须将数据从ganglia中取出来另外存储为更加灵活的数据结构。经过同事的一些实践发现最靠谱的就是文件存储。于是就有了以下流程:hadoop metrics采集–>ganglia收集汇总–>自定义程序转存为固定格式文件–>web查询分析界面及程序。这个方案充分利用了文件的快速检索和顺序读优势,而且每个指标一个文件也方便迁移和管理。

2、  如果一个集群的指标太多、实时性要求越来越高、分析要求越来越复杂,那我们就不得不放弃ganglia。通过扩展MetricsContext可以实现自己的数据发送算法,将集群数据发送到数据处理中心,通过更加有针对性的数据处理方案来分析海量指标数据。

通过上面的介绍我想大家已经掌握了metrics体系的构建思路,不一定非要使用hadoop的metrics框架我们也完全有能力创造出更适合自己的metrics解决方案。

相关 [hadoop metrics 体系] 推荐:

Hadoop Metrics体系分析之三:构建自己的Metrics

- - Taobao QA Team
大型分布式系统中需要metrics来了解系统状态已成为系统必需的功能之一. 其实测试系统甚至测试用例中也同样需要metrics. 通过这些指标我们可以了解测试的进度、状况、以及一些过程情况,比如性能指标和一些无法用是否判断数据. 下面我们就用一个简单的例子来看看如何使用hadoop metrics.

Hadoop Metrics体系架构分析

- - 非技术 - ITeye博客
原文: http://blog.csdn.net/chenpingbupt/article/details/7957396. 本文基于Hadoop 0.20.XX版本分析,和现在的Metrics2稍有不同. Hadoop Metrics用来统计集群运行数据,比如接口调用次数,响应时间,队列长度等等,现阶段(0.19版本)支持为数不多的几个层级的数据,分别是dfs,jvm,rpc,mepred等.

HBase Metrics机制、架构

- - 开源软件 - ITeye博客
HBase Metrics是一种监控信息实时收集机制. 功能性信息(Compaction Queue、Store Files个数等). JVM使用信息 (Heap Memory 的变化). 借助与Hadoop Metrics同样的方式,向Ganglia汇报. Ganglia的架构图:. Ganglia相关特性:.

ganglia收集hbase的metrics

- - CSDN博客云计算推荐文章
Ganglia 是 UC Berkeley 发起的一个开源监视项目,设计用于测量数以千计的节点. 每台计算机都运行一个收集和发送度量数据(如处理器速度、内存使用量等)的名为 gmond 的守护进程. 它将从操作系统和指定主机中收集. 接收所有度量数据的主机可以显示这些数据并且可以将这些数据的精简表单传递到层次结构中.

Eclipse:使用Metrics 测量复杂度

- - CSDN博客推荐文章
Metrics可以进行许多有用的代码度量,包括圈复杂度度量,它用于测量方法中惟一路径的数目. 在Eclipse中安装和使用Metrics步骤 . Elipse中安装Metrics插件 . 打开Help->Install new Software,点击Add,添加Repository. 选择相应的版本插件,继续随后的安装 .

微服务架构--服务框架,metrics 和调用链数据

- - 行业应用 - ITeye博客
微服务化以后,为了让业务开发人员专注于业. 务逻辑实现,避免冗余和重复劳动,规范研发. 提升效率,必然要将一些公共关注点推到框架. 服务框架 ( 图 9) 主要封装公共关注点. 服务注册、发现、负载均衡和健康检查,. 假定采用进程内 LB 方案,那么服务自注. 册一般统一做在服务器端框架中,健康检.

使用Metrics监控应用程序的性能

- - zzm
在编写应用程序的时候,通常会记录日志以便事后分析,在很多情况下是产生了问题之后,再去查看日志,是一种事后的静态分析. 在很多时候,我们可能需要了解整个系统在当前,或者某一时刻运行的情况,比如当前系统中对外提供了多少次服务,这些服务的响应时间是多少,随时间变化的情况是什么样的,系统出错的频率是多少. 这些动态的准实时信息对于监控整个系统的运行健康状况来说很重要.

Hadoop Streaming 编程

- - 学着站在巨人的肩膀上
Hadoop Streaming是Hadoop提供的一个编程工具,它允许用户使用任何可执行文件或者脚本文件作为Mapper和Reducer,例如:. 采用shell脚本语言中的一些命令作为mapper和reducer(cat作为mapper,wc作为reducer). 本文安排如下,第二节介绍Hadoop Streaming的原理,第三节介绍Hadoop Streaming的使用方法,第四节介绍Hadoop Streaming的程序编写方法,在这一节中,用C++、C、shell脚本 和python实现了WordCount作业,第五节总结了常见的问题.

Hadoop使用(一)

- Pei - 博客园-首页原创精华区
Hadoop使用主/从(Master/Slave)架构,主要角色有NameNode,DataNode,secondary NameNode,JobTracker,TaskTracker组成. 其中NameNode,secondary NameNode,JobTracker运行在Master节点上,DataNode和TaskTracker运行在Slave节点上.

Hadoop MapReduce技巧

- - 简单文本
我在使用Hadoop编写MapReduce程序时,遇到了一些问题,通过在Google上查询资料,并结合自己对Hadoop的理解,逐一解决了这些问题. Hadoop对MapReduce中Key与Value的类型是有要求的,简单说来,这些类型必须支持Hadoop的序列化. 为了提高序列化的性能,Hadoop还为Java中常见的基本类型提供了相应地支持序列化的类型,如IntWritable,LongWritable,并为String类型提供了Text类型.