背景・目的
Glueに、Job metrics
というチェックボックスがあり、これを有効にすることで、どのようなメトリクスが出力されるのかを確認してみました。
まとめ
-
Job metrics
を有効にすることで、Driver、Executorごと、または全てのExecutorを集計したメトリクスが確認できます。(無効にすると一切出力されません。) - 30秒ごとに、GlueからCloudWatchにレポートされます。
概要
メトリクスは 30 秒ごとに AWS Glue から CloudWatch に報告され、CloudWatch メトリクスダッシュボードは 1 分ごとにそれらを表示するように設定されています。AWS Glue メトリクスは、以前に報告された値からデルタ値を表示します。必要に応じて、メトリクスダッシュボードは 30 秒の値を集計 (合計) し、最近 1 分間分の値を取得します。AWS Glue メトリクスは、スクリプトでの GlueContext の初期化時に有効になり、基本的には Apache Spark タスクの終了時にのみ更新されます。また、これまでに完了した Spark タスク全体の集計値を表します。
- 30秒ごとにGlueからCloudWatchにレポートされる。
- メトリクスダッシュボードでは1分ごとに表示されるように設定される。
すべての AWS Glue メトリクス名の前には、必ず次のいずれかの種類のプレフィックスが付きます。
glue.driver. – 名前がこのプレフィックスで始まるメトリクスは、Spark ドライバーのすべてのエグゼキュターから集計された AWS Glue メトリクスか、Spark ドライバーに対応する Spark メトリクスを表します。
.executorIdglue. – executorId は、特定の Spark エグゼキュターの番号です。ログに表示されているエグゼキュータに対応します。
glue.ALL. – 名前がこのプレフィックスで始まるメトリクスは、すべての Spark エグゼキュターからの値を集計します。
- Driver、Executorごとのメトリクスが確認できる。
- ALLは、すべてのExecutorからの値を集計したもの
詳細は、AWS Glue のメトリクスを確認することで、メトリクスの内容は確認できます。
実践
事前準備
実装
Job metricsを有効にした場合
-
CLIでも確認します。表示されました。
$ aws cloudwatch list-metrics --namespace Glue --region us-west-2 --dimensions Name=JobName,Value=cloudwatch-metric-test-enabled { "Metrics": [ { "Namespace": "Glue", "MetricName": "glue.1.jvm.heap.usage", "Dimensions": [ { "Name": "Type", "Value": "gauge" }, { "Name": "JobRunId", "Value": "jr_31a602e3b350f95ae9650cf032b64d2605f8c1afdd8b41e81fafe4a6cca580f2" }, { "Name": "JobName", "Value": "cloudwatch-metric-test-enabled" } ] }, ・・・ ・・・
-
メトリクスの内容を確認します。なお、メトリクス名に番号が振られているものはexecutorIdとのことです。
$ aws cloudwatch list-metrics --namespace Glue --region us-west-2 --dimensions Name=JobName,Value=cloudwatch-metric-test-enabled | grep MetricName | sort | uniq "MetricName": "glue.1.jvm.heap.usage", "MetricName": "glue.1.jvm.heap.used", "MetricName": "glue.1.s3.filesystem.read_bytes", "MetricName": "glue.1.s3.filesystem.write_bytes", "MetricName": "glue.1.system.cpuSystemLoad", "MetricName": "glue.2.jvm.heap.usage", "MetricName": "glue.2.jvm.heap.used", "MetricName": "glue.2.s3.filesystem.read_bytes", "MetricName": "glue.2.s3.filesystem.write_bytes", "MetricName": "glue.2.system.cpuSystemLoad", "MetricName": "glue.3.jvm.heap.usage", "MetricName": "glue.3.jvm.heap.used", "MetricName": "glue.3.s3.filesystem.read_bytes", "MetricName": "glue.3.s3.filesystem.write_bytes", "MetricName": "glue.3.system.cpuSystemLoad", "MetricName": "glue.4.jvm.heap.usage", "MetricName": "glue.4.jvm.heap.used", "MetricName": "glue.4.s3.filesystem.read_bytes", "MetricName": "glue.4.s3.filesystem.write_bytes", "MetricName": "glue.4.system.cpuSystemLoad", "MetricName": "glue.5.jvm.heap.usage", "MetricName": "glue.5.jvm.heap.used", "MetricName": "glue.5.s3.filesystem.read_bytes", "MetricName": "glue.5.s3.filesystem.write_bytes", "MetricName": "glue.5.system.cpuSystemLoad", "MetricName": "glue.6.jvm.heap.usage", "MetricName": "glue.6.jvm.heap.used", "MetricName": "glue.6.s3.filesystem.read_bytes", "MetricName": "glue.6.s3.filesystem.write_bytes", "MetricName": "glue.6.system.cpuSystemLoad", "MetricName": "glue.7.jvm.heap.usage", "MetricName": "glue.7.jvm.heap.used", "MetricName": "glue.7.s3.filesystem.read_bytes", "MetricName": "glue.7.s3.filesystem.write_bytes", "MetricName": "glue.7.system.cpuSystemLoad", "MetricName": "glue.8.jvm.heap.usage", "MetricName": "glue.8.jvm.heap.used", "MetricName": "glue.8.s3.filesystem.read_bytes", "MetricName": "glue.8.s3.filesystem.write_bytes", "MetricName": "glue.8.system.cpuSystemLoad", "MetricName": "glue.9.jvm.heap.usage", "MetricName": "glue.9.jvm.heap.used", "MetricName": "glue.9.s3.filesystem.read_bytes", "MetricName": "glue.9.s3.filesystem.write_bytes", "MetricName": "glue.9.system.cpuSystemLoad", "MetricName": "glue.ALL.jvm.heap.usage", "MetricName": "glue.ALL.jvm.heap.used", "MetricName": "glue.ALL.s3.filesystem.read_bytes", "MetricName": "glue.ALL.s3.filesystem.write_bytes", "MetricName": "glue.ALL.system.cpuSystemLoad", "MetricName": "glue.driver.BlockManager.disk.diskSpaceUsed_MB", "MetricName": "glue.driver.aggregate.bytesRead", "MetricName": "glue.driver.aggregate.elapsedTime", "MetricName": "glue.driver.aggregate.numCompletedStages", "MetricName": "glue.driver.aggregate.numCompletedTasks", "MetricName": "glue.driver.aggregate.numFailedTasks", "MetricName": "glue.driver.aggregate.numKilledTasks", "MetricName": "glue.driver.aggregate.recordsRead", "MetricName": "glue.driver.aggregate.shuffleBytesWritten", "MetricName": "glue.driver.aggregate.shuffleLocalBytesRead", "MetricName": "glue.driver.jvm.heap.usage", "MetricName": "glue.driver.jvm.heap.used", "MetricName": "glue.driver.s3.filesystem.read_bytes", "MetricName": "glue.driver.s3.filesystem.write_bytes", "MetricName": "glue.driver.system.cpuSystemLoad", $
-
1つのジョブの実行で65本のメトリクスが取得されるようです。
$ aws cloudwatch list-metrics --namespace Glue --region us-west-2 --dimensions Name=JobName,Value=cloudwatch-metric-test-enabled | grep MetricName | sort | uniq | wc -l 65 $
Job metricsを無効にした場合
ちなみに、Job metricsを無効にした場合に、一切メトリクスは取得できないのか確認してみました。
-
念のためにCLIでも確認します。取得できません。
$ aws cloudwatch list-metrics --namespace Glue --region us-west-2 --dimensions Name=JobName,Value=cloudwatch-metric-test-disable { "Metrics": [] } $
参考