Hadoop通过Metrics机制,对集群中各机器的执行参数进行收集和发送。hadoop metrics中主要的功能块为:
MetricsContext
通过org.apache.hadoop.metrics.ContextFactory,可以获得一个MetricsContext对象,它保存这一组metrics的上下文信息,context启动一个monitor线程来按一定周期来收集和发送收集到的数据。Context的主要机制由一个虚类org.apache.hadoop.metrics.spi.AbstractMetricsContext提供,其中主要功能就是类实例化时启动monitor线程及定时器,在定时器到时时调用注册到其上的Updater(之后描述)的update方法更新数据,然后调用emitRecord方法将数据发送出去。
简单的例子,org.apache.hadoop.metrics.ganglia.GangliaContext继承了AbstractMetricsContext,并在其emitRecord方法中实现向ganglia发送数据的功能。
Updater
org.apache.hadoop.metrics.Updater,是一个Java Interface。可以理解为数据收集的主体,接口中只有一个doUpdates方法。实现一个updater的扩展类,并注册到以上描述的MetricsContext中,context的monitor线程就会定期调用updater的doUpdates方法来抓取数据。通常在doUpdates里我们会对系统的各种metrics做初步计算处理并push到MetricsRecord中。
MetricsRecord
org.apache.hadoop.metrics.MetricsRecord为一个Interface,其实际实现类为org.apache.hadoop.metrics.MetricsRecordImpl。MetricsRecord可以定位唯一标识名称,且与context关联。MetricsRecord中包含一个Map结构,存储所有其包含的Metrics对象。每个context下可以包含多个MetricsRecord。Context调用doUpdates收集到MetricsRecord后,再将它发送给文件或者ganglia。
MetricsBase
所有具体的metrics数据类都会继承MetricsBase,常用的有以下几种:
MetricsIntValue:整型数值
MetricsLongValue:长整型数值
MetricsTimeVaryingInt:一个时间周期内整型累积值,push到MetricsRecord后从0开始累积。
MetricsTimeVaryingLong:一个时间周期内长整型累积值
MetricsTimeVaryingRate:保存了操作所花费的时间和该时间内的操作次数。最终发送出去会是两个数值:一个时间周期内的总操作次数和每个操作所花费的平均时间(操作总时间/操作次数)。该metrics内部还保存了单次操作时间的min和max。
Hbase也扩展了几种metrics类型:
MetricsAvgValue:记录用户设置的值及设置的次数,最终输出的是平均值,收集完清零。
MetricsIntervalInt:一个时间周期内整型数值,收集完清零。
MetricsRate:一个时间周期内的数据/时间周期的长度,收集完清零。
MetricsString:一个字符串,主要用于JMX,ganglia不支持。
Hadoop metrics的配置
配置文件在hadoop的配置目录下,名称为hadoop-metrics.properties,下面是一个metrics的常用配置:
# Configuration of the “hbase” context for ganglia
# Pick one: Ganglia 3.0 (former) or Ganglia 3.1 (latter)
mapred.class=org.apache.hadoop.metrics.ganglia.GangliaContext
mapred.period=15
mapred.servers= hostname:8649
其中mapred.class定义了名叫mapred的MetricsContext 实现类是GangliaContext(在代码实现中,context实例化时通过调用MetricsUtil.getContext(“mapred”)获取该信息,并将这里配置context类实例化,每次收集数据的周期是15秒,发送数据到servers中定义的gmond地址。
实例
具体的metrics实现,可以参考org.apache.hadoop.hdfs.server.namenode.metrics.NameNodeMetrics, org.apache.hadoop.metrics.jvm.JvmMetrics以及我们自己实现的org.apache.hadoop.mapred.metrics.TaskMetrics等。
简单的初始化Metrics操作如:
public TaskMetrics(Configuration conf, boolean mapperTask) {
String sessionId = conf.get(“session.id”); // Initiate reporting of Java VM metrics
JvmMetrics.init(“Task”, sessionId);
MetricsContext context = MetricsUtil.getContext(“mapred”);
String taskType = mapperTask == true? “maptask” : “reducetask”;
MetricsRecord metricsRecord = MetricsUtil.createRecord(context, taskType);
metricsRecord.setTag(“sessionId”, sessionId);
context.registerUpdater(this);
}
Hadoop 与 ganglia
Hadoop通过其Metrics机制收集到统计信息之后,将通过GangliaContext将信息发送到ganglia的gmond。ganglia的gmetad会定期从gmond拖取数据并存为rrd文件显示在网页上。不能上传图片…… ganglia的结构图如下链接:http://linux.net527.cn/uploads/allimg/c101015/12W121E140-1U26.jpg
相关推荐
指标收集模块(metrics包)负责收集系统运行时的统计数据,帮助运维人员了解系统状态。 工具类(util包)提供了各种实用工具,便于开发者使用。record包根据DDL(数据描述语言)自动生成编解码函数,目前支持C++和...
- **Hadoop Metrics2**:提供了一套统一的接口,用于收集、聚合和暴露Hadoop组件的度量信息,方便系统监控和性能分析。 - **Ambari集成**:Ambari是一个用于部署、管理和监控Hadoop集群的工具,3.1.1版本中对...
6. **日志和监控**:Hadoop使用`org.apache.hadoop.log`和`org.apache.hadoop.metrics`包来收集和处理系统的日志和性能指标,帮助管理员监控和诊断系统状态。 **Hadoop 2.5.1源码解析** 从hadoop-2.5.1-src中,...
* metrics:提供系统统计数据的收集,属于网管范畴。 * util:提供工具类。 * record:根据 DDL(数据描述语言)自动生成他们的编解码函数,目前可以提供 C++ 和 Java。 * http:基于 Jetty 的 HTTP Servlet,用户...
6. **Hadoop Metrics2**:这是一个可扩展的度量系统,用于收集和报告Hadoop组件的性能数据。 7. **Hadoop Shuffle Service**:MapReduce阶段的一部分,负责在reduce任务中整理和分发map任务的输出数据。 8. **...
2.7.4 度量(metrics) 2.7.5 模式设计 2.7.6 计数器 2.7.7 批量加载(bulkloading) 第14章 ZooKeeper 安装和运行ZooKeeper 示例 ZooKeeper中的组成员关系 创建组 加入组 列出组成员 ZooKeeper...
通过监控工具(如Hadoop Metrics2和Ganglia)收集Hadoop集群的性能指标,如CPU利用率、磁盘I/O、网络带宽和任务执行时间等。 5.2 性能瓶颈识别 通过分析监控数据,识别出影响系统性能的关键因素,如网络延迟、磁盘...
还有很多其他的包,如tool提供了诸如DistCp等命令行工具,archivemapreduce用于Hadoop Map/Reduce的归档,util包包含了各种实用工具类,record则允许根据DDL自动生成序列化函数,metrics包则负责收集系统统计数据,...
- **Metrics**:系统监控与统计模块,用于收集运行时的各类性能指标。 - **Util**:通用工具类集合。 - **Record**:根据数据描述语言自动生成编解码函数,支持多种编程语言。 - **Http**:基于Jetty实现了HTTP...
2.7.4 度量(metrics) 2.7.5 模式设计 2.7.6 计数器 2.7.7 批量加载(bulkloading) 第14章 ZooKeeper 安装和运行ZooKeeper 示例 ZooKeeper中的组成员关系 创建组 加入组 列出组成员 ZooKeeper服务 数据模型 操作 ...
- `metrics`:负责收集系统统计信息,属于网络管理的范畴。 - `util`:工具类,提供各种便捷的实用方法。 - `record`:根据DDL(数据描述语言)自动生成编解码函数,支持C++和Java。 - `http`:基于Jetty的...
Hadoop 0.20.2提供了更好的集群管理和监控工具,如Hadoop JobTracker可以实时跟踪和管理MapReduce作业的执行状态,Hadoop Metrics系统则可以收集和展示集群的性能指标,帮助管理员优化集群性能。 5. 性能提升: ...
- **metrics**:收集系统统计数据。 - **util**:工具类集合。 - **record**:根据数据描述语言自动生成编解码函数。 - **http**:基于Jetty的HTTPServlet,提供文件系统状态信息和日志的浏览器查看功能。 - **log**...
- **metrics2-conf.xml**:配置Metrics2系统的收集和展示。 8. **性能优化**:包括设置合适的缓冲区大小、线程池大小、内存分配等,以提高系统效率。 9. **高可用性配置**:对于Hadoop 3.0及以上版本,支持...
- **metrics**:收集系统的统计数据,用于监控和性能分析。 - **util**:包含了一系列实用工具类。 - **record**:根据数据描述语言自动生成编解码函数,支持C++和Java等多种语言。 - **http**:提供了基于Jetty的...
1. 收集节点信息,通过心跳机制报告给Ambari-server。 2. 执行Ambari-server发送的操作,利用MessageQueue和ActionQueue进行任务处理。 Ambari-web架构则构建了一个用户友好的界面,用于展示集群状态、执行配置更改...
- **metrics**:收集系统统计数据。 - **util**:提供工具类。 - **record**:根据数据描述语言自动生成编解码函数。 - **http**:基于Jetty的HTTP服务器。 - **log**:提供HTTP访问日志功能。 #### 四、...