一文搞懂hadoop的metrics

【概述】


一个成熟的项目通常都会自带提供metric,反映运行时内部的各个信息,以方便进行监控运维。hadoop也不例外,通过jmx可以查看内部各个metrics信息,本文就来聊聊hdfs的metrics。

【Metrics指标查询】


hdfs的metrics通过jmx获取,具体可以通过http的方式获取,也可以通过命令行的方式来获取。

通过http的方式获取,可以全量获取所有jmx的指标项,也可以精确获取指定组件服务的指定模块的指定指标项。

  • 对于全量获取,其请求的URL格式为:

http://$IP:$PORT/jmx

其中IP、PORT为对应组件服务http的监听ip、端口。以nn为例,端口默认为50070。

  • 而对于精准获取,其请求的URL格式为:

http://$IP:$PORT/jmx?get=MXBeanName::AttributeName

其中MXBeanName的格式为:"Hadoop:service=$ServiceName,name=$Name"

ServiceName为组件服务的名称,对于hdfs而言就是NameNode、DataNode、JournalNode;对于yarn而言就是ResourceManager、NodeManager

Name是服务内部不同模块的名称,详见后面的指标详解。

AttributeName则是模块中的具体属性(指标项)。

精准获取的返回结果以JSON格式描述,具体如下代码所示:

{
  "beans": [ {
    "name" : "MXBeanName",
    "AttriuteName" : xxx,
    ...
  } ]
}

如果参数格式不正确,或者找不到对应的MXBean、Attribute,则返回空或者返回包含错误信息的JSON字符串,例如:

// 参数格式不正确
{
  "result" : "ERROR",
  "message" : "query format is not as expected."
}

// 找不到bean
{
  "beans" : []
}

// 找不到Attribute
{
  "beans" : [ {
    "name" : "Hadoop:service=NameNode,name=RpcActivityForPort9000",
    "modulerType" : "RpcActivityForPort9000",
    "result" : "ERROR",
    "message" : "No attribute with name GetBlockLocationsNumOps was found."
  } ]
}

通过命令行获取,其命令为:

hdfs jmxget -server $IP -port $PORT -service NameNode

ip仍旧是组件服务的IP,port则是指定jmi监听端口。

这里就不举例贴代码了,有兴趣的可以实际测试验证。

【概述】


知道了怎么查询(获取)jmx指标后,接下来自然是了解每个指标项的具体含义。这里主要针对namenode组件服务,罗列内部不同模块的主要指标项。

  • RpcDetailedActivityForPortXXX

模块名称后面的XXX为具体的rpc监听端口,例如默认的9000。因此如果有多个rpc监听端口,也就会有多个这样的模块,每个端口一个。

该模块下的指标主要为客户端和datanode不同rpc请求的统计信息,包括请求次数以及平均响应时长

指标项
说明
RegisterDatanodeNumOps
接收到的DN的注册次数
RegisterDatanodeAvgTime
dn注册请求的平均处理耗时
SendHeartbeatNumOps
接收到的dn心跳次数
SendHeartbeatAvgTime
心跳请求的平均处理耗时
TransitionToActiveNumOps
HA切换的次数
TransitionToActiveAvgTime
HA切换的平均耗时
BlockReportNumOps
全量块汇报的次数
BlockReportAvgTime
全量块汇报的平均处理耗时
BlockReceivedAndDeletedAvgTime
增量块汇报的次数
BlockReceivedAndDeletedNumOps增量块汇报的平均处理耗时
AddBlockNumOps
申请新block请求的次数
AddBlockAvgTime
申请新block请求的平均处理耗时

这里只罗列了部分请求,但从上面罗列的指标项可以看出来,针对每类RPC请求,都有两个指标,一个是次数(NumOps),一个是该类请求的平均处理耗时(AvgTime)。

  • RpcActivityForPortXXX

XXX同样表示具体的rpc监听端口,但与上面提到的rpc模块不同,该模块描述更通用的指标项,也就是rpc服务自身的一些信息,例如监听端口的首发字节数、累计rpc请求数、rpc请求的认证、鉴权情况、rpc队列的情况、以及监听端口的连接情况等信息。

指标项
说明
ReceivedBytes
该端口累计接收数据的大小(单位:字节)
SentBytes
该端口累计发送数据的大小(单位:字节)
RpcQueueTimeNumOps
rpc累计请求数
RpcQueueTimeAvgTime
rpc请求在队列中的平均时长(从接收到被处理过程中在队列中的时长)
RpcProcessingTimeNumOps
rpc累计请求数
RpcPorcessingTimeAvgTimerpc请求的平均处理耗时
RpcAuthenticationFailures
认证失败的rpc请求个数
RpcAuthenticationSuccess
认证成功的rpc请求个数
RpcAuthorizationFailures鉴权失败的rpc请求个数
RpcAuthorizationSuccesses
鉴权成功的rpc请求个数
RpcClientBackOff
rpc队列满导致的请求回退个数
在rpc的默认调度下,都是采用队列满,就死等的方式
而使用org.apache.hadoop.ipc.DecayRpcScheduler,就会出现回退的情况
RpcSlowCalls
慢请求的个数
所谓慢请求指的是:采样率大于1024,并且本次请求的处理时长带平均值+加权平均值
NumOpenConnections当前的连接数
CallQueueLength
当前请求队列的长度,即队列中的rpc请求个数
NumDroppedConnections
累计丢弃的连接数
  • StartupProgress

记录nn启动的各个阶段的信息、包括各阶段的耗时、完成度、以及各个阶段自身的一些数据,例如从fsimage中加载的inode数,从editlog中加载的事务数等,详细说明如下:

指标项
说明
ElapsedTime
启动阶段的总耗时
PercentComplete
启动的总完成度,1.0表示100%
LoadingFsImageCount
从Fsimage中加载的inode的个数
LoadingFsImageElapsedTime
fsimage加载阶段的总耗时(单位:毫秒)
LoadingFsImageTotal
从fsimage中加载的inode的总数
LoadingFsImagePercentComplete加载fsimage的完成度
LoadingEditsCount
加载editlog文件的个数,同样1.0表示100%
LoadingEditsElapsedTimeeditlog加载阶段的总耗时(单位:毫秒)
LoadingEditsTotal
从editlog中加载的事务总数
LoadingEditsPercentComplete
加载editlog的完成度
SavingCheckpointCount
checkpoing的保存个数
SavingCheckpointElapsedTime保存checkpoint的总耗时
SavingCheckpointTotal
checkpoint的保存个数
SavingCheckpointPercentComplete
保存checkpoint的完成度
SafeModeCount
块汇报的块个数
SafeModeElapsedTime
安全模式的总耗时
SafeModeTotal
块汇报的块个数
SafeModePercentComplete
安全模式的完成度
  • FSNamesystem

主要记录文件系统相关的信息、包括文件数、块的数目、以及对块进行分类后的信息、锁等待的信息(对文件系统的操作都会涉及一个全局锁),其他还包括dn节点的信息等

指标项
说明
MissingBlocks丢失的块的个数
MissingReplOneBlocks
副本数为1并且块丢失的块个数
ExpiredHeartbeats
dn累计心跳超时的次数
LastCheckpointTime上一次执行checkpoint的时间
TotalLoad
当前总的连接数
LockQueueLength当前等锁(FSNameSystemLock)的线程个数
BlocksTotal
当前已分配的block数
NumFilesUnderConstruction当前处于underConstruction的文件数
NumActiveClients
当前持有租约的活跃用户数
PendingReplicationBlocks
当前等待复制的块的个数
UnderReplicatedBlocks
实际副本数小于副本配置数的块的个数
PendingDeletionBlocks当前等待删除的块的个数

这里只罗列了部分指标,但是可以看出来,大部分是文章《5000字12张图讲解nn内存中的元数据信息》中介绍过的内存中保存元数据信息。

  • FSNamesystemState

文件系统的状态、包括总的容量、可用容量、剩余容量,以及dn节点信息、块信息等,和上面介绍的FSNamesystem会有大量重复的指标项。

指标项
说明
CapacityTotalHDFS总的总量大小,由dn上报汇总得出
CapacityUsed
hdfs当前已使用容量大小
CapacityRemaininghdfs当前剩余容量大小
NumLiveDataNodes
活跃的(心跳正常)dn节点个数
NumDeadDataNodes
心跳异常离线的dn节点个数
PendingReplicationBlocks
当前等待复制的块的个数
  • NamenodeActivity

nn的活跃信息,主要还是从客户端的角度进行统计,因此会和RpcDetailedActivityForPortXXX有不少相同的指标项。

指标项
说明
FilesCreated
文件创建个数
FilesAppended文件追加写次数
BlockReceivedAndDeleteOps
增量块汇报次数
StorageBlockReportOps
块汇报次数
BlockOpsQueued
全量块汇报请求等待处理的个数(对于全量块汇报,在nn内部是串行处理的,因此其他的增量块汇报请求会先进入到一个队列中等待)
  • NamenodeStatus

主要记录nn节点自身的一些状态信息,例如ip,端口、角色,状态等

指标项
说明
NNRole

nn的角色(Active或Standby

HostAndPort主要是rpc的监听ip端口
LastHATransitionTime
上一次进行HA切换的时间
  • NameNodeInfo

指标项
说明
ClusterId集群的uuid信息
BlockPoolId
块池的id
NameDirStatus

nn配置的用于持久化元数据的卷(目录)的信息

除了这些之外,还有一些和其他重复的指标项。

【总结】


来小结一下,本文主要介绍了hdfs的jmx的相关信息,包括两种获取方式,以及一些详细指标项的说明,还可以进行扩展的内容例如,如何对接prometheus、重点应该关注监控的指标项等。

好了,本文就介绍到这里了,如果觉得本文对你有帮助,三连走起(点赞,在看,分享转发),也欢迎加我微信交流~

<think>我们正在解决的是Hadoop Metrics配置文件的定位问题。警告信息表明系统试图查找`hadoop-metrics2-s3a-file-system.properties`和`hadoop-metrics2.properties`文件,但没有找到。 根据Hadoop的文档,Metrics系统需要配置文件来定义度量输出的接收器(sinks)和上下文(contexts)。通常,这些配置文件位于Hadoop的配置目录(如`$HADOOP_HOME/etc/hadoop`)中。 ### 解决方案步骤: #### 1. **确认配置文件是否存在** 首先,检查Hadoop配置目录中是否存在这两个文件: ```bash ls $HADOOP_HOME/etc/hadoop/hadoop-metrics2*.properties ``` 如果文件不存在,则需要创建它们。 #### 2. **创建配置文件** 如果文件不存在,我们可以从模板创建: ```bash cd $HADOOP_HOME/etc/hadoop cp hadoop-metrics2.properties.template hadoop-metrics2.properties cp hadoop-metrics2-s3a-file-system.properties.template hadoop-metrics2-s3a-file-system.properties ``` 注意:有些Hadoop版本可能没有提供`s3a`的模板,那么我们可以创建空文件或根据需求配置。 #### 3. **配置Metrics系统** 编辑`hadoop-metrics2.properties`文件,配置需要监控的组件。例如,基本的配置可能如下: ```properties # 示例:配置所有上下文(context)的输出到JMX *.sink.jmx.class=org.apache.hadoop.metrics2.sink.JmxSink ``` 同样,对于S3A文件系统的特定配置,可以在`hadoop-metrics2-s3a-file-system.properties`中设置。 #### 4. **设置环境变量(可选)** 如果配置文件不在默认路径,可以通过环境变量指定: ```bash export HADOOP_CONF_DIR=/path/to/your/hadoop/conf ``` #### 5. **验证配置** 重启Hadoop或Spark服务,检查警告是否消失。 ### 深入理解: - Hadoop Metrics系统负责收集和报告集群的监控指标。 - 如果没有配置文件,系统会使用默认配置(通常仅记录到日志),但不会抛出错误,只会警告。 - 在生产环境中,我们通常会将指标发送到监控系统(如Graphite、Prometheus等),这需要在配置文件中设置相应的Sink。 ### 相关问题: 1. 如何将Hadoop Metrics导出到Prometheus? 2. Hadoop Metrics支持哪些类型的Sink? 3. 如何自定义Hadoop Metrics指标? ### 引用说明: 上述解决方案参考了Hadoop官方文档中关于Metrics配置的部分[^1]。 </think>### 解决 `WARN MetricsConfig: Cannot locate configuration` 警告的方法 #### 1. **确认配置文件路径** Hadoop Metrics 系统默认在以下路径查找配置文件: ```bash # 核心配置文件路径 $HADOOP_HOME/etc/hadoop/hadoop-metrics2.properties $HADOOP_HOME/etc/hadoop/hadoop-metrics2-s3a-file-system.properties ``` ▸ **验证命令**: ```bash ls $HADOOP_HOME/etc/hadoop/*metrics2*.properties ``` #### 2. **创建缺失的配置文件** ##### 基本配置模板 (`hadoop-metrics2.properties`): ```properties # 监控数据接收器配置 *.sink.file.class=org.apache.hadoop.metrics2.sink.FileSink namenode.sink.file.filename=namenode-metrics.out datanode.sink.file.filename=datanode-metrics.out # JMX输出配置 *.sink.jmx.class=org.apache.hadoop.metrics2.sink.JmxSink ``` ##### S3A专用配置 (`hadoop-metrics2-s3a-file-system.properties`): ```properties s3a.sink.file.class=org.apache.hadoop.metrics2.sink.FileSink s3a.sink.file.filename=s3a-metrics.out s3a.source.filter.include=fs.s3a.* ``` #### 3. **指定配置文件路径** 若需自定义路径,在环境变量中声明: ```bash # 在 hadoop-env.sh 中添加 export HADOOP_METRICS_CONF=/path/to/your/custom-metrics-directory ``` #### 4. **禁用非必要监控** 在 `core-site.xml` 中关闭不需要的指标: ```xml <property> <name>fs.s3a.metrics.enabled</name> <value>false</value> <!-- 禁用S3A指标 --> </property> ``` #### 5. **验证配置生效** 重启服务后检查日志: ```bash tail -f $HADOOP_HOME/logs/hadoop-*.log | grep "MetricsConfig" ``` ▸ 成功标志: `INFO ConfigurationUtils: loaded properties from hadoop-metrics2-s3a-file-system.properties` ### 根本原因分析 该警告源于 Hadoop Metrics 系统初始化时无法定位配置文件[^1]: 1. **配置文件缺失**:安装时未生成默认配置文件 2. **路径错误**:`HADOOP_CONF_DIR` 环境变量指向错误位置 3. **组件依赖**:使用 S3A 文件系统时需专用配置 4. **权限问题**:配置文件存在但 JVM 无权访问 ### 配置优化建议 ```mermaid graph TB A[Hadoop Metrics配置] --> B[核心配置 hadoop-metrics2.properties] A --> C[S3A专用配置 hadoop-metrics2-s3a-file-system.properties] B --> D[文件输出 FileSink] B --> E[JMX输出 JmxSink] C --> F[S3A操作指标] D --> G[本地日志文件] E --> H[JMX监控工具] ``` > **关键原则**: > 1. 至少保留一个有效的配置文件 > 2. S3A 操作必须配置专用文件 > 3. 路径优先级:环境变量 > `$HADOOP_HOME/etc/hadoop` > 默认路径 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值