一文搞懂hadoop的metrics

語言: CN / TW / HK


【概述】


一個成熟的專案通常都會自帶提供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)。
如有侵權,請聯絡 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。