バッチ ワークロードのモニタリングとトラブルシューティング

このドキュメントでは、Apache Spark 向け Serverless の バッチ ワークロードをモニタリングしてトラブルシューティングするために使用できるツールとファイルについて説明します。

コンソールからワークロードのトラブルシューティングを行う Google Cloud

バッチジョブが失敗した場合やパフォーマンスが低い場合は、まずコンソールの Google Cloud [**バッチ**]ページから [**バッチの詳細**]ページを開くことをおすすめします。

[概要] タブを使用する: トラブルシューティング ハブ

[概要] タブには、[バッチの詳細] ページ を開くとデフォルトで選択され、バッチの健全性を迅速に に初期評価するのに役立つ重要な指標とフィルタされたログが表示されます。この初期評価の後、 [バッチの詳細] ページから利用できる、[Spark UI]、[ログ エクスプローラ]、[Gemini Cloud Assist] などのより専門的なツールを使用して、詳細な分析を行うことができます。

バッチ指標のハイライト

[概要] タブには、[バッチの詳細] ページの重要なバッチ ワークロード指標の値を表示するグラフが含まれています。指標グラフは が完了すると表示され、リソース 競合、データスキュー、メモリ不足などの潜在的な問題が視覚的に示されます。

バッチ指標ダッシュボード。

指標の表

次の表は、 [バッチの詳細] ページに表示される Spark ワークロードの指標の一覧と、指標の 値からワークロードのステータスとパフォーマンスに関する分析情報を得る方法について説明します。 Google Cloud

指標 確認できるポイント
エグゼキュータ レベルの指標
JVM GC 時間と実行時間の比率 この指標は、エグゼキュータごとの JVM GC(ガベージ コレクション)時間と実行時間の比率を示します。比率が高い場合は、特定のエグゼキュータで実行されているタスク内のメモリリークや、非効率的なデータ構造が原因で、オブジェクトのチャーンが高くなっている可能性があります。
流出したディスク バイト数 この指標は、さまざまなエグゼキュータに流出したディスク バイトの合計数を示します。エグゼキュータのディスク バイト数が多すぎる場合は、データスキューが発生している可能性があります。指標が時間とともに増加する場合は、メモリ不足またはメモリリークが発生しているステージがあることを示している可能性があります。
読み取りバイト数と書き込みバイト数 この指標は、エグゼキュータごとの書き込みバイト数と読み取りバイト数を示します。読み取りバイト数または書き込みバイト数に大きな差異がある場合は、レプリケートされた結合によって特定のエグゼキュータでデータ増幅が発生している可能性があります。
読み取りと書き込みのレコード この指標は、エグゼキュータごとの読み取りと書き込みのレコードを示します。書き込みレコード数が少ないのに読み取りレコード数が非常に多い場合は、特定のエグゼキュータの処理ロジックにボトルネックがあり、待機中にレコードが読み取られている可能性があります。読み取りと書き込みが常に遅れているエグゼキュータは、そのノードでのリソース競合や、エグゼキュータ固有のコードの非効率性を示している可能性があります。
シャッフル書き込み時間と実行時間の比率 この指標は、全体の実行時間に対して、エグゼキュータがシャッフル実行時間に費やした時間を示します。一部のエグゼキュータでこの値が高い場合は、データスキューまたはデータのシリアル化が非効率的であることを示している可能性があります。シャッフル書き込み時間が長いステージは、Spark UI で確認できます。これらのステージで、完了までに平均時間よりも長い時間がかかる外れ値タスクを探します。シャッフル書き込み時間が長いエグゼキュータで、ディスク I/O アクティビティも高いかどうかを確認します。シリアル化の効率化とパーティショニング ステップの追加が役立つ場合があります。レコードの読み取りと比較してレコードの書き込みが非常に多い場合は、非効率的な結合または誤った変換が原因で、意図しないデータの重複が発生している可能性があります。
アプリケーション レベルの指標
ステージの進行状況 この指標は、失敗したステージ、待機中のステージ、実行中のステージの数を示します。失敗したステージや待機中のステージが多数ある場合は、データスキューが発生している可能性があります。データ パーティションを確認し、Spark UI の [ステージ] タブを使用してステージの失敗理由をデバッグします。
バッチ Spark エグゼキュータ この指標は、必要なエグゼキュータの数と 実行中のエグゼキュータの数を示します。必要なエグゼキュータと実行中のエグゼキュータの間に大きな差がある場合は、自動スケーリングの問題を示している可能性があります。
VM レベルの指標
使用されたメモリ この指標は、使用中の VM メモリの割合を示します。マスターの割合が高い場合は、ドライバがメモリ不足になっている可能性があります。他の VM ノードでは、割合が高い場合、エグゼキュータがメモリ不足であることを示している可能性があります。これにより、ディスクの流出が高まり、ワークロード実行時間が遅くなる可能性があります。Spark UI を使用してエグゼキュータを分析し、GC 時間の長さとタスクの失敗回数を確認します。また、大規模なデータセットのキャッシュと不要な変数のブロードキャストについて、Spark コードをデバッグします。

ジョブのログ

The [Batch details] page includes a [Job logs] section that lists warnings and errors filtered from the job (batch workload) logs. his feature allows for quick identification of critical issues without needing to manually parse through extensive log files. プルダウン メニューからログの重大度Error など)を選択し、テキストフィルタ を追加して結果を絞り込むことができます。詳細な分析を行うには、[ログ エクスプローラで表示] アイコン をクリックして、選択したバッチログをログ エクスプローラで開きます。

Cloud Logging でバッチログを表示する [
View batch logs in Cloud Logging
]

例: コンソールの [**バッチの詳細**] ページの [重大度] セレクタで Errors を選択すると、**ログ エクスプローラ** が開きます。 Google Cloud

バッチ ログ エクスプローラ。

Spark UI

Spark UI は、Apache Spark 向け Serverless のバッチ ワークロードから Apache Spark の実行の詳細を収集します。デフォルトで 有効になっている Spark UI 機能は無料で使用できます。

Spark UI 機能で収集されたデータは 90 日間保持されます。この ウェブ インターフェースを使用すると、永続的履歴サーバー を作成しなくても、Spark ワークロードをモニタリングしてデバッグできます。

必要な Identity and Access Management の権限とロール

バッチ ワークロードで Spark UI 機能を使用するには、次の権限が必要です。

  • データ収集権限: dataproc.batches.sparkApplicationWrite。この 権限は、バッチ ワークロードを実行するサービス アカウントに付与する必要があります。 この権限は、 Dataproc Worker ロールに含まれています。このロールは、Apache Spark 向け Serverless がデフォルトで使用する Compute Engine デフォルト サービス アカウント に自動的に付与されます( Apache Spark 向け Serverless サービス アカウントを参照)。 ただし、バッチ ワークロードに カスタム サービス アカウント を指定する場合は、そのサービス アカウントに dataproc.batches.sparkApplicationWrite 権限を追加する必要があります(通常は、サービス アカウントに Dataproc Worker ロールを付与します)。

  • Spark UI アクセス権限: dataproc.batches.sparkApplicationRead。コンソールで Spark UI にアクセスするには、この 権限をユーザーに付与する必要があります。Google Cloud この権限は、 Dataproc ViewerDataproc EditorDataproc Administrator のロールに含まれています。コンソールで Spark UI を開くには、これらのロールのいずれか、またはこの権限を含むカスタムロールが必要です。 Google Cloud

Spark UI を開く

Spark UI ページは、 Google Cloud コンソールのバッチ ワークロードで使用できます。

  1. [Apache Spark 向け Serverless のインタラクティブ セッション] ページに移動します。

    Dataproc バッチに移動

  2. [**バッチ ID**] をクリックして、[**バッチの詳細**] ページを開きます。

  3. 上部のメニューで [Spark UI を表示] をクリックします。

[Spark UI を表示] ボタンは、次の場合に無効になります。

Apache Spark 向け Serverless のログ

Apache Spark 向け Serverless では、ロギングがデフォルトで有効になっており、ワークロードが完了した後にワークロード ログが 保持されます。Apache Spark 向け Serverless は、Cloud Logging でワークロード ログを収集します。 Apache Spark 向け Serverless のログには、ログ エクスプローラの Cloud Dataproc Batch リソースでアクセスできます。

Apache Spark 向け Serverless のログをクエリする

コンソールのログ エクスプローラには、バッチ ワークロード ログを調べるクエリを作成するためのクエリペインがあります。 Google Cloud バッチ ワークロード ログを調べるクエリを作成する手順は次のとおりです。

  1. [ログ エクスプローラ] に移動

  2. 現在のプロジェクトが選択されています。[プロジェクトのスコープを絞り込む] をクリックして、別のプロジェクトを選択できます。
  3. バッチログクエリを定義します。

    • フィルタ メニューを使用して、バッチ ワークロードをフィルタします。

      1. [すべてのリソース] で、[Cloud Dataproc Batch] リソースを選択します。

        1. [リソースの選択] パネルで、バッチの [ロケーション]、 [バッチ ID] の順に選択します。これらのバッチ パラメータは、コンソールの Dataproc の [**バッチ**] ページに表示されます。 Google Cloud

        2. [**適用**] をクリックします。

        3. [ログ名を選択] で、[ログ名を検索] ボックスに「dataproc.googleapis.com」と入力して、クエリするログタイプを制限します。表示されたログファイル名を 1 つ以上選択します。

    • クエリエディタを使用して、VM 固有のログをフィルタします。

      1. 次の例に示すように、リソースタイプと VM リソース名を指定します。

        resource.type="cloud_dataproc_batch"
        labels."dataproc.googleapis.com/resource_name"="gdpic-srvls-batch-BATCH_UUID-VM_SUFFIX"
        
        注:

        • BATCH_UUID: バッチ UUID は、コンソールの [バッチの詳細] ページに表示されます。このページは、 [バッチ] ページでバッチ ID をクリックすると表示されます。 Google Cloud

        バッチログには、VM リソース名のバッチ UUID も一覧表示されます。 バッチ driver.log の例を次に示します。

  4. [**クエリを実行**] をクリックします。

Apache Spark 向け Serverless のログタイプとサンプルクエリ

次のリストに、さまざまな Apache Spark 向け Serverless ログタイプと 各ログタイプのログ エクスプローラのクエリの例を示します。

  1. dataproc.googleapis.com/output: このログファイルには、バッチ ワークロードの出力内容が含まれています。 Apache Spark 向け Serverless は、バッチ出力を output Namespace にストリーミングし、 ファイル名を JOB_ID.driver.log に設定します。

    出力ログのログ エクスプローラ クエリの例:

    resource.type="cloud_dataproc_batch"
    resource.labels.location="REGION"
    resource.labels.batch_id="BATCH_ID"
    logName="projects/PROJECT_ID/logs/dataproc.googleapis.com%2Foutput"
    

  2. dataproc.googleapis.com/spark: spark Namespace は、Dataproc クラスタのマスター VM とワーカー VM で実行されているデーモンとエグゼキュータの Spark ログを集約します。各ログエントリには、ログソースを識別する masterworker、または executor コンポーネントラベルが含まれています。

    • executor: ユーザーコード エグゼキュータからのログ。通常、これらは分散ログです。
    • master: Spark スタンドアロン リソース マネージャー マスターのログ。Dataproc on Compute Engine YARN ResourceManager ログに似ています。
    • worker: Spark スタンドアロン リソース マネージャー ワーカーのログ。Dataproc on Compute Engine YARN NodeManager ログに似ています。

    spark Namespace 内のすべてのログに対するログ エクスプローラのクエリの例:

    resource.type="cloud_dataproc_batch"
    resource.labels.location="REGION"
    resource.labels.batch_id="BATCH_ID"
    logName="projects/PROJECT_ID/logs/dataproc.googleapis.com%2Fspark"
    

    spark Namespace の Spark スタンドアロン コンポーネント ログのサンプル ログ エクスプローラ クエリ:

    resource.type="cloud_dataproc_batch"
    resource.labels.location="REGION"
    resource.labels.batch_id="BATCH_ID"
    logName="projects/PROJECT_ID/logs/dataproc.googleapis.com%2Fspark"
    jsonPayload.component="COMPONENT"
    

  3. dataproc.googleapis.com/startup: startup Namespace には、バッチ(クラスタ)の起動ログが含まれます。初期化スクリプトのログが含まれます。コンポーネントはラベルで識別されます。次に例を示します。

    startup-script[855]: ... activate-component-spark[3050]: ... enable spark-worker
    
    指定した VM の起動ログのログ エクスプローラ クエリの例:
    resource.type="cloud_dataproc_batch"
    resource.labels.location="REGION"
    resource.labels.batch_id="BATCH_ID"
    logName="projects/PROJECT_ID/logs/dataproc.googleapis.com%2Fstartup"
    labels."dataproc.googleapis.com/resource_name"="gdpic-srvls-batch-BATCH_UUID-VM_SUFFIX"
    
  4. dataproc.googleapis.com/agent: agent Namespace は、Dataproc エージェント ログを集約します。各ログエントリには、ログソースを識別するファイル名ラベルが含まれています。

    指定したワーカー VM によって生成されたエージェントログのログ エクスプローラ クエリの例:

    resource.type="cloud_dataproc_batch"
    resource.labels.location="REGION"
    resource.labels.batch_id="BATCH_ID"
    logName="projects/PROJECT_ID/logs/dataproc.googleapis.com%2Fagent"
    labels."dataproc.googleapis.com/resource_name"="gdpic-srvls-batch-BATCHUUID-wWORKER#"
    

  5. dataproc.googleapis.com/autoscaler: autoscaler Namespace は、 Apache Spark 向け Serverless のオートスケーラー ログを集約します。

    指定したワーカー VM によって生成されたエージェントログのログ エクスプローラ クエリの例:

    resource.type="cloud_dataproc_batch"
    resource.labels.location="REGION"
    resource.labels.batch_id="BATCH_ID"
    logName="projects/PROJECT_ID/logs/dataproc.googleapis.com%2Fautoscaler"
    labels."dataproc.googleapis.com/resource_name"="gdpic-srvls-batch-BATCHUUID-wWORKER#"
    

詳細については、 Dataproc ログをご覧ください。

Apache Spark 向け Serverless の監査ログについては、 Dataproc 監査ロギングをご覧ください。

ワークロード指標

Apache Spark 向け Serverless は、 [Metrics Explorer] または [バッチの詳細] ページから表示できるバッチ指標と Spark 指標を提供します。 Google Cloud

バッチ指標

Dataproc batch リソース指標は、バッチ リソースに関する分析情報を提供します。 バッチ エグゼキュータの数など。バッチ指標には dataproc.googleapis.com/batch という接頭辞が付いています。

Metrics Explorer でのバッチ指標の例。

Spark 指標

Apache Spark 向け Serverless のデフォルトでは、 利用可能な Spark 指標の収集が有効になります。 ただし、 Spark 指標収集プロパティ を使用して無効にしない限り、または 1 つ以上の Spark 指標のコレクションをオーバーライドできます。

利用可能な Spark 指標 には、Spark ドライバとエグゼキュータの指標、システム指標が含まれます。利用可能な Spark 指標には custom.googleapis.com/ という接頭辞が付いています。

Metrics Explorer の Spark 指標の例。

指標アラートを設定する

Dataproc 指標アラートを作成する と、ワークロードの問題に関する通知を受け取ることができます。

グラフを作成

コンソールの Google Cloud [Metrics Explorer] を使用して、ワークロード指標を可視化するグラフを作成できます。たとえば、 を表示するグラフを作成し、disk:bytes_used でフィルタできます。batch_id

Cloud Monitoring

Monitoring では、ワークロードのメタデータと指標を使用して、Apache Spark 向け Serverless ワークロードの健全性とパフォーマンスに関する分析情報を提供します。 ワークロード指標には、Spark 指標、バッチ指標、オペレーション指標が含まれます。

コンソールの Google Cloud Cloud Monitoringを使用すると、指標の確認、グラフの追加、ダッシュボードの作成、アラートの作成を行えます。

ダッシュボードを作成する

複数の プロジェクトとさまざまな Google Cloud プロダクトの指標を使用して、ワークロードをモニタリングするダッシュボードを作成できます。詳細については、 カスタム ダッシュボードの作成と管理をご覧ください。

永続的履歴サーバー

Apache Spark 向け Serverless は、ワークロードの実行に必要なコンピューティング リソースを作成し、 それらのリソースでワークロードを実行し、ワークロードが終了するとリソースを削除します。 ワークロードが完了すると、ワークロードの指標とイベントは保持されません。ただし、永続的履歴サーバー(PHS)を使用すると、ワークロード アプリケーションの履歴(イベントログ)を Cloud Storage に保持できます。

バッチ ワークロードで PHS を使用するには、次の操作を行います。

  1. Dataproc 永続的履歴サーバー(PHS)を作成します

    Google Cloud
  2. ワークロードを送信するときに PHS を指定します。

  3. コンポーネント ゲートウェイ を使用して PHS に接続し、アプリケーションの詳細、スケジューラ ステージ、タスクレベルの詳細、 環境とエグゼキュータの情報を表示します。

自動チューニング

  • Apache Spark 向け Serverless の自動チューニングを有効にする: コンソール、gcloud CLI、Dataproc API を使用して、定期的な各 Spark バッチ ワークロードを送信する場合は、Apache Spark 向け Serverless の自動チューニングを有効にできます。 Google Cloud

Console

次の手順を実行して、繰り返しの Spark バッチ ワークロードで自動チューニングを有効にします。

  1. コンソールで、Dataproc の [バッチ] ページに移動します。 Google Cloud

    Dataproc バッチに移動

  2. バッチ ワークロードを作成するには、[作成] をクリックします。

  3. In the [Container] section, fill in the [Cohort] name, which identifies the batch as one of a series of recurring workloads. Gemini 支援の分析は、このコホート名で送信された 2 回目以降のワークロードに適用されます。たとえば、毎日 TPC-H クエリを実行するスケジュール設定されたワークロードのコホート名として TPCH-Query1を指定します。

  4. 必要に応じて [バッチを作成] ページの他のセクションに入力し、 [送信] をクリックします。詳細については、 バッチ ワークロードを送信するをご覧ください。

gcloud

次の gcloud CLI gcloud dataproc batches submit コマンドをターミナル ウィンドウでローカルに実行するか、Cloud Shell で実行して、繰り返しの Spark バッチ ワークロードで自動チューニングを有効にします。

gcloud dataproc batches submit COMMAND \
    --region=REGION \
    --cohort=COHORT \
    other arguments ...

次のように置き換えます。

  • COMMAND: Spark ワークロード タイプ(SparkPySparkSpark-SqlSpark-R など)。
  • REGION: ワークロードが実行される リージョンを指定します。
  • COHORT: コホート名。バッチが一連の繰り返しワークロードの 1 つとして識別されます。Gemini 支援の分析は、このコホート名で送信された 2 回目以降のワークロードに適用されます。たとえば、毎日 TPC-H クエリを実行するスケジュール設定されたワークロードのコホート名として TPCH Query 1 を指定します。

API

batches.create リクエストに RuntimeConfig.cohort 名を含めて、繰り返しの Spark バッチ ワークロードで自動チューニングを有効にします。自動チューニングは、このコホート名で送信された 2 回目以降のワークロードに適用されます。たとえば、毎日 TPC-H クエリを実行するスケジュール設定されたワークロードのコホート名として TPCH-Query1 を指定します。

例:

...
runtimeConfig:
  cohort: TPCH-Query1
...