Workload AnalyticsによるAltusジョブの分析

Workload Analyticsが収集して解析するデータは、Altusコンソールの一連のページで見ることができます。それらのページでは、ヘルスチェック、実行の詳細、ベースラインに関する高レベルの情報が表示されます。さらには特定のステージの詳細、エラーメッセージ、ログ、設定といったさらに詳細な情報も見ることができます。

Workload Analyticsを使えば、問題のあるSQLによる実行の失敗といったジョブの問題を特定できます。問題が特定できれば、そのジョブをActionsメニューから複製し、修正して再実行できます。

ヘルスチェック

ヘルスチェックは、ジョブの実行時にWorkload Analyticsが実行する一連の検査です。ヘルスチェックからは、ジョブが処理したデータの量やジョブの実行時間など、ジョブのパフォーマンスに関する知見が得られます。

実行されたヘルスチェックとそのステータスの完全なリストはHealth Checksで見ることができます。

Workload AnalyticsのHealth Checksページは、3つのエリアを使ってジョブの情報を表示します。左のエリアにはWorkload Analyticsが実行したヘルスチェックのリストが表示されます。中央のエリアには、特定のヘルスチェックが調べたジョブのステージが表示されます。デフォルトでは、問題のないステージは表示されません。右のエリアのリストには、ステージの詳細な情報が表示されます。



Execution Completion
ジョブが成功したか失敗したかを示します。ヘルスチェックは、失敗したジョブだけを表示します。

Baseline

ベースラインのヘルスチェックは、同じジョブの以前の実行時の情報を使って現在の実行のパフォーマンスを計測します。ヘルスチェックのためのベースラインデータが不足している状態では、ヘルスチェックはhealthyとされます。ベースラインに関する詳しい情報については、Baselineを参照してください。

Duration
ジョブが完了するまでにかかった時間を、同じジョブの以前の実行時の情報に基づくベースラインと比較します。ステータスがhealthyとなっているなら、それは現在のジョブの実行にかかった時間とベースラインの中央値との差異が25%以内かつ5分以内であるということです。
Input Size
ジョブへの入力サイズをベースラインと比較します。ステータスがhealthyとなっているなら、それは現在のジョブへの入力サイズとベースラインの中央値との差異が25%以内かつ100MB以内であるということです。
Workload Analyticsは以下のメトリクスを使って入力サイズを計算します。
  • org.apache.hadoop.mapreduce.FileSystemCounter:HDFS_BYTES_READ
  • org.apache.hadoop.mapreduce.FileSystemCounter:S3A_BYTES_READ
  • SPARK:INPUT_BYTES
Output Size
ジョブからの出力サイズをベースラインと比較します。ステータスがhealthyとなっているなら、それは現在のジョブからの出力サイズとベースラインの中央値との差異が25%以内かつ100MB以内であるということです。
Workload Analyticsは以下のメトリクスを使って出力サイズを計算します。
  • org.apache.hadoop.mapreduce.FileSystemCounter:HDFS_BYTES_WRITTEN
  • org.apache.hadoop.mapreduce.FileSystemCounter:S3A_BYTES_WRITTEN
  • SPARK:OUTPUT_BYTES

Skew

スキュー(偏り)のヘルスチェックは、同じジョブの中のタスク同士のパフォーマンスを比較します。理想的なパフォーマンスを発揮できるのは、同じジョブの中のタスク同士が同じ量の処理を行っている場合です。

Task Duration
タスクが処理を終えるまでにかかった時間を比較します。ステータスがhealthyとなっているなら、それは成功したタスクが処理を終えるまでにかかった時間が標準偏差の2倍以内であり、かつすべてのタスクの平均時間から5分以内だったということです。ステータスがhealthyとなっていない場合は、まずタスク間で処理が均等に分散されるようにジョブを設定してみてください。
Input Data
タスクが処理した入力データの量を比較します。ステータスがhealthyとなっているなら、それは入力データサイズが標準偏差の2倍以内であり、かつ入力データ量の平均から100MB以内だったということです。ステータスがhealthyとなっていない場合は、まず各タスクの入力量が近くなるようデータをパーティショニングしてみてください。
Output Data
タスクが生成した出力データの量を比較します。ステータスがhealthyとなっているなら、それは出力データサイズが標準偏差の2倍以内であり、かつ出力データ量の平均から100MB以内だったということです。ステータスがhealthyとなっていない場合は、まず各タスクの出力量が近くなるようデータをパーティショニングしてみてください。
Shuffle Input
タスクのシャッフルフェーズにおける入力サイズを比較します。ステータスがhealthyとなっているなら、それはシャッフルフェーズの入力データサイズが標準偏差の2倍以内であり、かつシャッフルフェーズの入力データ量の平均から100MB以内だったということです。ステータスがhealthyとなっていない場合は、まずシャッフルフェーズにおいて各タスクが処理するデータ量が近くなるよう入力データを分配してみてください。
Read Speed
各タスクのデータ処理の速度を比較します。ステータスがhealthyとなっているなら、それは各タスクのデータ処理の速度が平均から標準偏差の2倍以内であり、平均から1MB/秒以内だったということです。

Resources

リソースのヘルスチェックは、リソースの不足によってタスクのパフォーマンスに影響が生じていないかをチェックします。

Task Wait Time
成功した試行の開始にかかった時間が長すぎるタスクがないかを判断します。ステータスがhealthyとなっているなら、それは成功したタスクの開始にかかった時間が15分未満であり、タスク実行の合計時間の40%未満になっているということです。リソースが十分にあれば、最大の待ち時間が下がることによってジョブの実行時間が短くなります。ステータスがhealthyになっていない場合は、まず競合の少ないリソースプール内で実行させるか、クラスターにノードを追加することによって、ジョブに与えるリソースを増やしてください。
Disk Spillage
タスクが大量のデータをディスクにスピルし、その結果ディスクI/O過多になって実行速度が落ちていないかを判断します。ステータスがhealthyとなっているなら、それはスピルされたレコードの総数が1000未満であり、かつスピルされたレコード数を総出力レコード数で割った値が3以下になっているということです。ステータスがhealthyになっていない場合は、まず利用可能なメモリを増やしてください。
Task Garbage Collection (GC) Duration
タスクがガベージコレクションに費やした時間が10分を超えていないかを判断します。ガベージコレクションにかかった時間が長くなれば、それはタスクの実行時間を引き延ばし、アプリケーションの速度を低下させます。ステータスがhealthyになっていない場合は、まずタスクに与えるメモリの量を増やすか、アプリケーションのガベージコレクションの設定をチューニングしてください。
Task Retries
失敗したタスクの試行数がタスク総数の10%を超えていないかを判断します。失敗した試行は再試行しなければならないので、パフォーマンスの低下とリソースの無駄な消費につながります。

実行の詳細

Execution Detailsページには、ジョブのすべてのステージが時系列のリストで表示されます。左のエリアには、ステージが実行された時刻とその期間が表示されます。右のエリアには、ログや設定といったさらに詳細な情報が表示されます。

Baseline

ベースラインは、ジョブの現在のパフォーマンスを過去の平均実行パフォーマンスと比較することによって計測する方法を提供します。ベースラインは、ジョブの実行の中で直近の30回のパフォーマンスデータを使用します。実行回数は最低3回必要です。ベースラインとの比較は、4回目のジョブの実行から始まります。ベースラインが生成されたあとは、実行をベースラインと比較すると劇的な差異が生じていることがあります。実行回数が増えてベースラインが成熟してくれば、そのジョブにとってノーマルなトレンドがはっきりしてくることが分かるでしょう。

Baselineページでは、現在のジョブ及びそのステージ群のパフォーマンスを、過去の実行のベースラインと比較できます。ジョブ名のドロップダウンメニューをクリックし、ステージを選択してください。

Trend

Trendページには、繰り返し実行されているジョブのこれまでの以下のトレンドが表示されます。:
  • 期間
  • 処理されたデータ
  • 生成されたデータ
加えて、ジョブの過去の実行と、ジョブのステータスやヘルスチェックの問題といった基本的な情報の概要も見ることができます。