前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一文搞懂hadoop的metrics

一文搞懂hadoop的metrics

作者头像
陈猿解码
发布2023-02-28 14:54:22
1.1K0
发布2023-02-28 14:54:22
举报
文章被收录于专栏:陈猿解码

【概述】


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

【Metrics指标查询】


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

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

  • 对于全量获取,其请求的URL格式为:
代码语言:javascript
复制
http://$IP:$PORT/jmx

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

  • 而对于精准获取,其请求的URL格式为:
代码语言:javascript
复制
http://$IP:$PORT/jmx?get=MXBeanName::AttributeName

其中MXBeanName的格式为:"Hadoop:service=

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

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

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

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

代码语言:javascript
复制
{
  "beans": [ {
    "name" : "MXBeanName",
    "AttriuteName" : xxx,
    ...
  } ]
}

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

代码语言:javascript
复制
// 参数格式不正确
{
  "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."
  } ]
}

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

代码语言:javascript
复制
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累计请求数

RpcPorcessingTimeAvgTime

rpc请求的平均处理耗时

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%

LoadingEditsElapsedTime

editlog加载阶段的总耗时(单位:毫秒)

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会有大量重复的指标项。

指标项

说明

CapacityTotal

HDFS总的总量大小,由dn上报汇总得出

CapacityUsed

hdfs当前已使用容量大小

CapacityRemaining

hdfs当前剩余容量大小

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、重点应该关注监控的指标项等。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-01-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 陈猿解码 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
大数据
全栈大数据产品,面向海量数据场景,帮助您 “智理无数,心中有数”!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档