一文搞懂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累计请求数 |
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、重点应该关注监控的指标项等。
好了,本文就介绍到这里了,如果觉得本文对你有帮助,三连走起(点赞,在看,分享转发),也欢迎加我微信交流~
本文分享自微信公众号 - hncscwc(gh_383bc7486c1a)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
英特尔加入 RISC-V 国际基金会,并设立 10 亿美元的基金用于发展 RISC-V
早在 2006 年,英特尔就放弃了基于 ARM 的 CPU 开发项目,当时他们以约 6 亿美元的价格将 XScale PXA 技术出售给 Marvell Technology Group。当时的想法是,x86 架构将成为所有英特尔处理器的基石。但如今英特尔面对来自 AMD,以及高通和苹果等基于 ARM 芯片的竞争,急需开辟一条新的路线。 英特尔近日正式宣布,他们已经以 Premier 成员的身份加入了 RISC-V 国际基金会(RISC-V International 是一个非盈利组织,支持免费和开放的 RISC 指令集体系结构和扩展),此举是英特尔持续投资于开源 RISC-V 架构的一部分。(英特尔:我做了个违背祖宗的决定) 目前英特尔已经有了基于 RISC-V 的 Nios V 处理器,而且在前段时间举办的 CES 上,英特尔旗下的子公司 Mobileye 也发布了 5nm RISC-V 处理器,但英特尔并不打算在短期内用 RISC-V 取代 x86_64,此次加入 RISC-V International 主要是对该生态进行长期投资,并且希望能吸引更多的客户加入英特尔代工服务业务...
- 下一篇
记录:尝试 HashiCorp Vault + AWS IAM + AWS Lambda
Vault 是 HashiCorp 开源的密钥库程序。 从 https://www.vaultproject.io/downloads 下载得到的 CLI 程序包括既包括客户端也包括服务端实现。 本文以 Windows + PowerShell + Nodejs 为环境描述用法,其它环境基本相同。 Vault 基本用法 运行开发服务器: vault server -dev 开发服务器会直接使用 HTTP 而不启用 HTTPS,在 http://127.0.0.1:8200 。 开发服务器会默认启用 Vault UI,在 http://127.0.0.1:8200/ui 。 根据运行后的提示,客户端的用法是: $env:VAULT_ADDR="http://127.0.0.1:8200" vault status vault auth list 静态的密钥读写: vault kv put secret/hello foo=1 bar=a vault kv get secret/hello 这里的 secret 是一个默认的存储库(Secret Engine),hello 是具体的密钥,而...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS7设置SWAP分区,小内存服务器的救世主
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Docker安装Oracle12C,快速搭建Oracle学习环境