Hadoop Metrics体系架构分析

标签: hadoop metrics 体系 | 发表时间:2014-02-05 22:01 | 作者:san_yun
出处:http://www.iteye.com
本文基于Hadoop 0.20.XX版本分析,和现在的Metrics2稍有不同

1:概述

Hadoop Metrics用来统计集群运行数据,比如接口调用次数,响应时间,队列长度等等,现阶段(0.19版本)支持为数不多的几个层级的数据,分别是dfs,jvm,rpc,mepred等。这些数据收集之后可以sink(通过context)到不同的目的地,比如文件,ganglia,等,也可以自己实现一个context去sink这些数据到你指定的地方。
2:架构
基本上由四个部分构成:
1、context,context是用来sink收集的数据的。而所有需要sink的数据存放在context内的一个map来保存所有put进来的metricsRecord中,然后startmonitor之后启动一个timer来定时将map中所有的record通过调用update函数来将调用context实现类的emitRecords发送出去。
    • context一般不直接实例化,而是从ContextFactory中get出来,首先ContextFactory的实例通过静态方法getFactory()来实例化,在getFactory()的实例化过程中,会读取hadoop-metrics.properties配置,然后依据传入的context名在配置中找到对应的构建方法进行构建,构建完了之后,立即进行初始化。
    MetricsUtil类负责上从ContextFactory实例中获取context实例,并且startmonitor。在startmonitor中启动一个timer,这个timer定时类里边,首先调用updater.doUpdates(),然后调用emitRecords();将context中的所有metricsRecord全部通过调用各个context的emitRecord->emitMetrics发送出去
    • 从上面也能看出一个context中包含有多个updater(通过Set<Updater>来保存,在updater构造函数中将自己注册到相应的context中),也包含多个Record(通过Map<String,RecordMap> bufferedData->RecordMap extends HashMap<TagMap,MetricMap>->TagMap extends TreeMap<String,Object> : MetricMap extends TreeMap<String,Number>)
    • 现有的context包括Filesystem,Ganglia,Nullcontext,当然也可以自己实现一个来达到自己的目的
    • 收集到自己所有的数据之后,还需要到hadoop-metrics.properties中去配置一个context,然后让数据(Record在构建函数中绑定context)随这个context而sink出去。
    • ganglia中,每个图的命名由contextname.recordname.metricsname组成
2、metricsRecord可以看成一个map容器,内面存放了各种string:number的刻度值,作为一个信息的载体被context发送出去
    • 数据存放在Map<String,MetricValue> metricTable结构,MetricValue保存数值型数据,并且标识出该数据是绝对值还是相对值
    • 比较操蛋的是,Record中不会保留过去的数值,只保留最近一次数据(即使是相对数据),所以Record中有个update方法,在这个方法内调用context的update方法,Record中的数值更新到context中对应的Record中去(相对值则会加上context中的老数据)
    • 每个Record都有一个RecordName,所以context中即使有多个RecordMap也能通过名字表示出来,然后存放到bufferData中去。
    • 在构造函数中,每个Record绑定一个context,通过context将数据sink出去。
3、Updater这个是重头戏,如果要实现自己的收据收集,这个是比不可少的。updater的本义就是为了将过程中收集的数据更新到update对应的Record中。然后在调用Record的update(内部调context的update,见前述)将数据更新到context的Recordmap中。
    • 这个类目的是为了将过程中收集数据更新到信息载体中去,准备发布了,但是谁来发起这个更新呢,如前所述是由context中的timer定时调用的,先更新,后sink。
    • 在构造函数中首先获取对应的context,然后创建一个Record(同时将该Record加入到context的Recordmap中去),最后将自己注册到context中。
    • 有一个结构为Map<String, MetricsBase> metricsList的来保存这个updater类中所有的统计数据,在update方法中将metricList(MetricsRegistry registry )中所有的metrics更新到Record中去。
    • 基本上每一类需要统计的数据都有一个对应的updater来完成上述的操作
    • 在程序运行过程中,需要进行数据统计的时候,就会从updater的
    • metrics可以动态添加(RpcMetrics)到metricList(MetricsRegistry registry )中,也可以预先定义好(NamenodeMtrics),视场景而定。
4、MetricsBase,基类,过程中收集数据的时候,依赖这个类来做数据收集,现阶段有三个类型的数据收集
    • 时间累积型,一直做累加操作
    • 时间值型,只看某个时间的数据值,不叠加任何数据
    • 时间率型,时间作为分母,如速率,平均响应时间等。
 
3:叠加所有的东西
    1. 数据需要统计数据时,首先实现好updater,在update中定义需要收集的数据(metircList),最后数据sink的地方(context),这些数据的名称及存放载体(MetricRecord)等等。 
    2. 在程序需要数据统计的地方,通过update来获取对应统计项[通过mericsList(动态),或预先定义的名字(静态)]进行数据叠加或者统计
    3. 通过context的定时程序将Updater中数据定时sink出去。


已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [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等.

SpringBoot-Metrics监控

- -
Metrics基本上是成熟公司里面必须做的一件事情,简单点来说就是对应用的监控,之前在一些技术不成熟的公司其实是不了解这种概念,因为业务跟技术是相关的. 当业务庞大起来,技术也会相对复杂起来,对这些复杂的系统进行监控就存在必要性了,特别是在soa化的系统中,完整一个软件的功能分布在各个系统中,针对这些功能进行监控就更必要了.

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

详解 Flink Metrics 原理与监控实战

- - zhisheng的博客
本文主要讲解 Metrics、如何使用 Metrics 分析问题并解决问题,并对 Metrics 监控实战进行解释说明. 本文作者:Apache Flink Contributor 刘彪. Flink 提供的 Metrics 可以在 Flink 内部收集一些指标,通过这些指标让开发人员更好地理解作业或集群的状态.

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作业,第五节总结了常见的问题.