読者です 読者をやめる 読者になる 読者になる

Hadoop メトリクス一覧と統計情報の出力

参照:
HADOOP HACKS
- 1章 Hadoopに関する統計情報

双六工場日誌
- Hadoop メトリクスの一覧
hadoop.apache.org - 本家

f:id:karahiyo:20130320022232j:plain

取得可能な統計情報として、HDFS、MapReduce、JVM、RPCをあげている。


HDFSに関する統計情報

NameNode、DataNodeとHDFS全体の三種の統計情報を取得できる。

  • NameNodeに関する統計情報
  • NameNodeの操作に関する統計情報を取得できる。dfs.namenode.メトリクスを使用。NameNodeによって作成される。

    取得可能な統計情報の種類:ブロック操作関連、ファイル操作関連、メタ情報操作関連、ブロックレポート関連

    dfs.namenode.AddBlockOps(ブロックをHDFSに追加した回数)
    dfs.namenode.GetBlockLocations
    dfs.namenode.GetListingOps
    dfs.namenode.JournalTransactionsBatchedInSync
    dfs.namenode.Transactions_avg_time
    dfs.namenode.Transactions_num_ops
    dfs.namenode.FilesRenamed(ファイルのリネームをした回数)
    dfs.namenode.CreateFileOps
    dfs.namenode.DeleteFileOps
    dfs.namenode.FileInfoOps
    dfs.namenode.FilesAppended
    dfs.namenode.FilesCreated
    dfs.namenode.FilesInGetListingOps
    dfs.namenode.Syncs_avg_time
    dfs.namenode.Syncs_num_ops (fsImageとeditsをマージした回数)
    dfs.namenode.fsImageLoadTime
    dfs.namenode.blockReport_avg_time
    dfs.namenode.blockReport_num_ops (ブロックレポート回数:DataNodeから提供される)
    
  • HDFSに関する統計情報
  • HDFSの状態に関する統計情報とブロックに関する統計情報が取得できる。dfs.FSNamesystem., dfs.FSDirectory.メトリクスを使用する。NameNodeによって作成。

    取得可能な統計情報の種類:HDFSの容量、HDFS上のブロック関連、HDFS上のファイル数関連

    dfs.FSDirectory.files_deleted (削除したファイル数)
    dfs.FSNamesystem.BlockCapacity
    dfs.FSNamesystem.BlocksTotal (HDFS上にて管理しているブロック数)
    dfs.FSNamesystem.CapacityRemainingGB
    dfs.FSNamesystem.CapacityTotalGB
    dfs.FSNamesystem.CapacityUsedGB (HDFSの利用サイズをGB単位で取得)
    dfs.FSNamesystem.CorruptBlocks (レプリカが存在しないブロック数)
    dfs.FSNamesystem.ExcessBlocks
    dfs.FSNamesystem.FilesTotal (HDFS上のファイル数)
    dfs.FSNamesystem.MissingBlocks
    dfs.FSNamesystem.PendingDeletionBlocks
    dfs.FSNamesystem.PendingReplicationBlocks
    dfs.FSNamesystem.ScheduledReplicationBlocks
    dfs.FSNamesystem.TotalLoad
    dfs.FSNamesystem.UnderReplicatedBlocks
    
  • DataNode自身の統計情報
  • DataNodeの操作に関する統計情報。DataNodeによって生成され、dfc.datanode.メトリクスで取得可能。

    取得可能な統計情報の種類:ブロック操作関連、クライアントとのやり取り関連、クライアント(DFSClient)とのやり取り関連、ハートビートに関する統計情報

    dfs.datanode.blockChecksumOp_avg_time
    dfs.datanode.blockChecksumOp_num_ops
    dfs.datanode.blockReports_avg_time
    dfs.datanode.blockReports_num_ops
    dfs.datanode.block_verification_failures
    dfs.datanode.blocks_read
    dfs.datanode.blocks_removed
    dfs.datanode.blocks_replicated
    dfs.datanode.blocks_verified
    dfs.datanode.blocks_written (実際のブロック書き込み回数)
    dfs.datanode.bytes_read
    dfs.datanode.bytes_written
    dfs.datanode.copyBlockOp_avg_time
    dfs.datanode.copyBlockOp_num_ops
    dfs.datanode.heartBeats_avg_time
    dfs.datanode.heartBeats_num_ops (ハートビート送信回数)
    dfs.datanode.readBlockOp_avg_time (ブロック読み込み操作平均処理時間) 
    dfs.datanode.readBlockOp_num_ops (ブロック読み込み操作回数)
    dfs.datanode.reads_from_local_client (ローカルクライアントからの読み込み回数)
    dfs.datanode.reads_from_remote_client 
    dfs.datanode.replaceBlockOp_avg_time
    dfs.datanode.replaceBlockOp_num_ops
    dfs.datanode.volumeFailures
    dfs.datanode.writeBlockOp_avg_time (ブロック書き込み操作回数)
    dfs.datanode.writeBlockOp_num_ops (ブロック書き込み操作回数)
    dfs.datanode.writes_from_local_client
    dfs.datanode.writes_from_remote_client (リモートクライアントからの書き込み回数)
    

MapReduceに関する統計情報

  • JobTracker自身に関する統計情報
  • mapred.jobtrackerメトリクス。

    取得可能な統計情報の種類: MapReduceジョブ関連、タスクに関連、管理しているTaskTracker関連

    mapred.jobtracker.blacklisted_maps
    mapred.jobtracker.blacklisted_reduces
    mapred.jobtracker.heartbeats (TaskTrackerから受信したハートビート数)
    mapred.jobtracker.jobs_completed (完了したMapReduceジョブ数)
    mapred.jobtracker.jobs_failed
    mapred.jobtracker.jobs_killed
    mapred.jobtracker.jobs_preparing
    mapred.jobtracker.jobs_running
    mapred.jobtracker.jobs_submitted
    mapred.jobtracker.map_slots
    mapred.jobtracker.maps_completed
    mapred.jobtracker.maps_failed
    mapred.jobtracker.maps_killed
    mapred.jobtracker.maps_launched
    mapred.jobtracker.occupied_map_slots (利用されているMapスロット数)
    mapred.jobtracker.occupied_reduce_slots
    mapred.jobtracker.reduce_slots
    mapred.jobtracker.reduces_completed (処理が完了したReduceタスク数)
    mapred.jobtracker.reduces_failed
    mapred.jobtracker.reduces_killed
    mapred.jobtracker.reduces_launched
    mapred.jobtracker.reserved_map_slots
    mapred.jobtracker.reserved_reduce_slots
    mapred.jobtracker.running_maps (実行中のMapタスク数)
    mapred.jobtracker.running_reduces
    mapred.jobtracker.trackers
    mapred.jobtracker.trackers_blacklisted
    mapred.jobtracker.trackers_decommissioned
    mapred.jobtracker.waiting_maps
    mapred.jobtracker.waiting_reduces
    
  • TaskTracker
  • mapred.tasktracker.メトリクス。

    取得可能な統計情報の種類:スロット関連、タスク関連

    mapred.tasktracker.mapTaskSlots (Map処理スロット数)
    mapred.tasktracker.maps_running
    mapred.tasktracker.reduceTaskSlots
    mapred.tasktracker.reduces_running (実行中のReduceタスク数)
    mapred.tasktracker.tasks_completed
    mapred.tasktracker.tasks_failed_ping
    mapred.tasktracker.tasks_failed_timeout
    
  • Shuffle
  • mapred.shuffleOutput.メトリクス。

    mapred.shuffleOutput.shuffle_failed_outputs
    mapred.shuffleOutput.shuffle_handler_busy_percent
    mapred.shuffleOutput.shuffle_output_bytes
    mapred.shuffleOutput.shuffle_success_outputs (Shuffleで取得成功したMap出力数)
    

JVM

jvm.metrics.メトリクス

取得可能な統計情報の種類:ヒープメモリ関連、GC関連、ログ出力関連、スレッド関連

  • NameNode
  • jvm.NameNode.metrics.gcCount (GC実行回数)
    jvm.NameNode.metrics.gcTimeMillis
    jvm.NameNode.metrics.logError (ERRORレベルのメッセージを出力した回数)
    jvm.NameNode.metrics.logFatal
    jvm.NameNode.metrics.logInfo
    jvm.NameNode.metrics.logWarn
    jvm.NameNode.metrics.maxMemoryM
    jvm.NameNode.metrics.memHeapCommittedM
    jvm.NameNode.metrics.memHeapUsedM (利用しているヒープメモリサイズをMB単位で取得)
    jvm.NameNode.metrics.memNonHeapCommittedM
    jvm.NameNode.metrics.memNonHeapUsedM
    jvm.NameNode.metrics.threadsBlocked
    jvm.NameNode.metrics.threadsNew
    jvm.NameNode.metrics.threadsRunnable (実行中のスレッド数)
    jvm.NameNode.metrics.threadsTerminated
    jvm.NameNode.metrics.threadsTimedWaiting
    jvm.NameNode.metrics.threadsWaiting
    
  • DataNode
  • jvm.DataNode.metrics.gcCount (GC実行回数)
    jvm.DataNode.metrics.gcTimeMillis
    jvm.DataNode.metrics.logError (ERRORレベルのメッセージを出力した回数)
    jvm.DataNode.metrics.logFatal
    jvm.DataNode.metrics.logInfo
    jvm.DataNode.metrics.logWarn
    jvm.DataNode.metrics.maxMemoryM
    jvm.DataNode.metrics.memHeapCommittedM
    jvm.DataNode.metrics.memHeapUsedM (利用しているヒープメモリサイズをMB単位で取得)
    jvm.DataNode.metrics.memNonHeapCommittedM
    jvm.DataNode.metrics.memNonHeapUsedM
    jvm.DataNode.metrics.threadsBlocked
    jvm.DataNode.metrics.threadsNew
    jvm.DataNode.metrics.threadsRunnable (実行中のスレッド数)
    jvm.DataNode.metrics.threadsTerminated
    jvm.DataNode.metrics.threadsTimedWaiting
    jvm.DataNode.metrics.threadsWaiting
    
  • JobTracker
  • jvm.JobTracker.metrics.gcCount (GC実行回数)
    jvm.JobTracker.metrics.gcTimeMillis
    jvm.JobTracker.metrics.logError (ERRORレベルのメッセージを出力した回数)
    jvm.JobTracker.metrics.logFatal
    jvm.JobTracker.metrics.logInfo
    jvm.JobTracker.metrics.logWarn
    jvm.JobTracker.metrics.maxMemoryM
    jvm.JobTracker.metrics.memHeapCommittedM
    jvm.JobTracker.metrics.memHeapUsedM (利用しているヒープメモリサイズをMB単位で取得)
    jvm.JobTracker.metrics.memNonHeapCommittedM
    jvm.JobTracker.metrics.memNonHeapUsedM
    jvm.JobTracker.metrics.threadsBlocked
    jvm.JobTracker.metrics.threadsNew
    jvm.JobTracker.metrics.threadsRunnable (実行中のスレッド数)
    jvm.JobTracker.metrics.threadsTerminated
    jvm.JobTracker.metrics.threadsTimedWaiting
    jvm.JobTracker.metrics.threadsWaiting
    
  • TaskTracker
  • jvm.TaskTracker.metrics.gcCount (GC実行回数)
    jvm.TaskTracker.metrics.gcTimeMillis
    jvm.TaskTracker.metrics.logError (ERRORレベルのメッセージを出力した回数)
    jvm.TaskTracker.metrics.logFatal
    jvm.TaskTracker.metrics.logInfo
    jvm.TaskTracker.metrics.logWarn
    jvm.TaskTracker.metrics.maxMemoryM
    jvm.TaskTracker.metrics.memHeapCommittedM
    jvm.TaskTracker.metrics.memHeapUsedM (利用しているヒープメモリサイズをMB単位で取得)
    jvm.TaskTracker.metrics.memNonHeapCommittedM
    jvm.TaskTracker.metrics.memNonHeapUsedM (利用していないヒープメモリサイズをMB単位で取得)
    jvm.TaskTracker.metrics.threadsBlocked
    jvm.TaskTracker.metrics.threadsNew
    jvm.TaskTracker.metrics.threadsRunnable (実行中のスレッド数)
    jvm.TaskTracker.metrics.threadsTerminated
    jvm.TaskTracker.metrics.threadsTimedWaiting
    jvm.TaskTracker.metrics.threadsWaiting
    
  • Secondary Namenode
  • jvm.SecondaryNameNode.metrics.gcCount (GC実行回数)
    jvm.SecondaryNameNode.metrics.gcTimeMillis
    jvm.SecondaryNameNode.metrics.logError (ERRORレベルのメッセージを出力した回数)
    jvm.SecondaryNameNode.metrics.logFatal
    jvm.SecondaryNameNode.metrics.logInfo
    jvm.SecondaryNameNode.metrics.logWarn
    jvm.SecondaryNameNode.metrics.maxMemoryM
    jvm.SecondaryNameNode.metrics.memHeapCommittedM
    jvm.SecondaryNameNode.metrics.memHeapUsedM (利用しているヒープメモリサイズをMB単位で取得)
    jvm.SecondaryNameNode.metrics.memNonHeapCommittedM
    jvm.SecondaryNameNode.metrics.memNonHeapUsedM
    jvm.SecondaryNameNode.metrics.threadsBlocked
    jvm.SecondaryNameNode.metrics.threadsNew
    jvm.SecondaryNameNode.metrics.threadsRunnable (実行中のスレッド数)
    jvm.SecondaryNameNode.metrics.threadsTerminated
    jvm.SecondaryNameNode.metrics.threadsTimedWaiting
    jvm.SecondaryNameNode.metrics.threadsWaiting
    

RPC

HDFS、MapReduce、JVMに加えHadoopノード全てで、RPCに関する統計情報を取得できる。

rpc.metrics.

取得できる統計情報の種類:通信関連、認証・認可関連、詳細情報

  • NameNode
  • rpc.metrics.NumOpenConnections (コネクション確立数)
    rpc.metrics.ReceivedBytes
    rpc.metrics.RpcProcessingTime_avg_time
    rpc.metrics.RpcProcessingTime_num_ops
    rpc.metrics.RpcQueueTime_avg_time
    rpc.metrics.RpcQueueTime_num_ops
    rpc.metrics.SentBytes (送信バイト数)
    rpc.metrics.callQueueLen
    rpc.metrics.rpcAuthenticationFailures
    rpc.metrics.rpcAuthenticationSuccesses (RPC認証成功回数)
    rpc.metrics.rpcAuthorizationFailures
    rpc.metrics.rpcAuthorizationSuccesses
    
  • DataNode
  • rpc.metrics.NumOpenConnections (コネクション確立数)
    rpc.metrics.ReceivedBytes
    rpc.metrics.RpcProcessingTime_avg_time
    rpc.metrics.RpcProcessingTime_num_ops
    rpc.metrics.RpcQueueTime_avg_time
    rpc.metrics.RpcQueueTime_num_ops
    rpc.metrics.SentBytes (送信バイト数)
    rpc.metrics.callQueueLen
    rpc.metrics.rpcAuthenticationFailures
    rpc.metrics.rpcAuthenticationSuccesses (RPC認証成功回数)
    rpc.metrics.rpcAuthorizationFailures
    rpc.metrics.rpcAuthorizationSuccesses
    
  • JobTracker
  • rpc.metrics.NumOpenConnections (コネクション確立数)
    rpc.metrics.ReceivedBytes
    rpc.metrics.RpcProcessingTime_avg_time
    rpc.metrics.RpcProcessingTime_num_ops
    rpc.metrics.RpcQueueTime_avg_time
    rpc.metrics.RpcQueueTime_num_ops
    rpc.metrics.SentBytes (送信バイト数)
    rpc.metrics.callQueueLen
    rpc.metrics.rpcAuthenticationFailures
    rpc.metrics.rpcAuthenticationSuccesses (RPC認証成功回数)
    rpc.metrics.rpcAuthorizationFailures
    rpc.metrics.rpcAuthorizationSuccesses
    
  • TaskTracker
  • rpc.metrics.NumOpenConnections (コネクション確立数)
    rpc.metrics.ReceivedBytes
    rpc.metrics.RpcProcessingTime_avg_time
    rpc.metrics.RpcProcessingTime_num_ops
    rpc.metrics.RpcQueueTime_avg_time
    rpc.metrics.RpcQueueTime_num_ops
    rpc.metrics.SentBytes (送信バイト数)
    rpc.metrics.callQueueLen
    rpc.metrics.rpcAuthenticationFailures
    rpc.metrics.rpcAuthenticationSuccesses (RPC認証成功回数)
    rpc.metrics.rpcAuthorizationFailures
    rpc.metrics.rpcAuthorizationSuccesses
    
  • 詳細情報。全てのノードで取得できる共通的な情報、ノードの種類ごとに取得できる情報
  • rpc.detailed-metrics.blockReceived_num_opts (ブロック受信回数)
    rpc.detailed-metrics.canCommit_avg_time
    rpc.detailed-metrics.canCommit_num_ops
    rpc.detailed-metrics.commitPending_avg_time
    rpc.detailed-metrics.commitPending_num_ops
    rpc.detailed-metrics.done_avg_time
    rpc.detailed-metrics.done_num_ops
    rpc.detailed-metrics.getMapCompletionEvents_avg_time
    rpc.detailed-metrics.getMapCompletionEvents_num_ops
    rpc.detailed-metrics.getProtocolVersion_avg_time (プロトコルバージョン処理の平均時間)
    rpc.detailed-metrics.getProtocolVersion_num_ops
    rpc.detailed-metrics.getSystemDir_num_ops (MapReduceシステムディレクトリ取得回数)
    rpc.detailed-metrics.getTask_avg_time
    rpc.detailed-metrics.getTask_num_ops
    rpc.detailed-metrics.ping_avg_time
    rpc.detailed-metrics.ping_num_ops
    rpc.detailed-metrics.rollFsImage_num_opts (fsImageファイルロール回数)
    rpc.detailed-metrics.statusUpdate_avg_time
    rpc.detailed-metrics.statusUpdate_num_ops
    

統計情報の取得手段

  1. ファイルに出力
  2. JMX(Java Management eXtension)経由で出力
  3. Ganglia経由で出力
  4. HadoopのWebインターフェース経由で出力

1. ファイルに出力

$vi ${HADFOOP_HOME}/conf/hadoop-metrics.properties

設定例:MapReduce統計情報を10秒間隔でFileContextに取得
mapred.class=org.apache.hadoop.metrics.file.FileContext
mapred.period=10
mapred.fileName=/var/log/hadoop/mapred-metrics/log

※ タイムスタンプ情報なし!??

2. JMX経由

VisualVMやjconsoleなどのソフトウェアから確認する方法。

$ vi ${HADOOP_HOME}/conf/hadoop-env.sh






3. Ganglia経由

統計情報をGangliaに出力する。 $vi hadoop-metrics.properties

※ (注意) 取得して最新の1時間分のデータは取得した値を確認することができるが、1時間より古いデータは、1日単位のデータの中に丸め込まれた値として格納される。また、1日より古いデータは1週間単位のデータに丸め込まれるなど、データ保持期間について注意しなければならない。

4. HadoopのWebインターフェース経由

いちばん簡単。以下にアクセス

http://[ノードのアドレス]:[ノードのポート番号]/metrics

© karahiyo