バッチとセッションの作成失敗のトラブルシューティング

このドキュメントでは、Apache Spark 向け Serverless の Spark バッチ ワークロードとインタラクティブ セッションが起動しない一般的な問題のトラブルシューティングについて説明します。Google Cloud

概要

通常、バッチまたはセッションの起動に失敗すると、 次のエラー メッセージが報告されます。

Driver compute node failed to initialize for batch in 600 seconds

このエラー メッセージは、Spark ドライバ がデフォルトのタイムアウト時間である 600 秒(10 分)以内に起動できなかったことを示しています。 一般的な原因は、サービスアカウントの権限、リソースの可用性、 ネットワーク構成、Spark プロパティに関連しています。

バッチとセッションの起動失敗の原因とトラブルシューティングの手順

以降のセクションでは、バッチとセッションの起動失敗の一般的な原因と、 問題の解決に役立つトラブルシューティングのヒントについて説明します。

サービス アカウントの権限が不十分

Apache Spark 向け Serverless バッチまたはセッションで使用されるサービス アカウントには、Apache Spark 向け Serverless のオペレーションとリソースへのアクセスに必要な権限を含む特定の IAM ロール が必要です。 Google Cloud サービスアカウントに必要なロールがない場合、 バッチまたはセッションの Spark ドライバが初期化に失敗する可能性があります。

  • 必要なワーカーロール: バッチまたはセッションのサービス アカウントには、 Dataproc ワーカーロールroles/dataproc.worker)が必要です。このロールには、 Apache Spark 向け Serverless がコンピューティング リソースをプロビジョニングして 管理するために必要な最小限の権限が含まれています。
  • データアクセス権限: Spark アプリケーションが Cloud Storage または BigQuery から読み取りまたは 書き込みを行う場合、サービス アカウントにはこれらのサービスに関連するロールが必要です:
    • Cloud Storage: 読み取りにはStorage Object Viewer ロールroles/storage.objectViewer)が必要です。書き込みにはStorage Object Creator ロールroles/storage.objectCreator)またはStorage Object Admin ロールroles/storage.admin)が必要です。
    • BigQuery: 読み取りにはBigQuery Data Viewer ロールroles/bigquery.dataViewer) が必要です。書き込みにはBigQuery Data Editor ロールroles/bigquery.dataEditor) が必要です。
  • ロギング権限: サービス アカウントには、Cloud Logging にログを書き込む 権限を持つロールが必要です。通常、 Logging Writer ロールroles/logging.logWriter)で十分です。

トラブルシューティングのヒント:

割り当て不足

Apache Spark 向け Google Cloud Serverless やその他の Google Cloud リソースのプロジェクトまたはリージョン固有の割り当てを超えると、新しいバッチやセッションを開始できなくなる可能性があります。

トラブルシューティングのヒント:

  • Apache Spark 向け Google Cloud Serverless の割り当てページ で、同時実行バッチ、DCU、シャッフル ストレージの上限を確認します。

    • gcloud compute quotas list コマンドを使用して、 プロジェクトとリージョンの現在の使用量と上限を確認することもできます。
      gcloud compute quotas list --project=PROJECT_ID --filter="service:dataproc.googleapis.com"
      
  • 割り当て上限に繰り返し達する場合は、割り当ての増加を コンソールから Google Cloud リクエストすることを検討してください。

ネットワーク構成に関する問題

VPC 構成、限定公開の Google アクセス、 ファイアウォール ルールなどのネットワーク設定が正しくないと、Spark ドライバが初期化されたり、 必要なサービスに接続できなくなったりする可能性があります。

トラブルシューティングのヒント:

  • バッチまたはセッションに指定された VPC ネットワークとサブネットが 正しく構成され、十分な IP アドレスが使用可能であることを確認します。

  • バッチまたはセッションが公共のインターネットを経由せずに Google API とサービスにアクセスする必要がある場合は、 サブネットで限定公開の Google アクセスが有効になっていることを確認します。

  • VPC ファイアウォール ルールを確認して、Spark アプリケーションに必要な内部通信や Google API または 外部サービスへの下り(外向き)が誤ってブロックされていないことを確認します。

無効な Spark プロパティまたはアプリケーション コードの問題

Spark プロパティ(特にドライバ リソースに関連するプロパティ)の構成が誤っている場合や、Spark アプリケーションのコードに問題がある場合は、起動に失敗する可能性があります。

トラブルシューティングのヒント:

  • spark.driver.memoryspark.driver.cores の値を確認します。 これらの値が妥当な範囲内にあり、使用可能な DCU と一致していることを確認します。 これらのプロパティの値が大きすぎると、リソース が枯渇し、初期化に失敗する可能性があります。デバッグを簡単にするため、不要な Spark プロパティや 試験運用版の Spark プロパティを削除します。

  • 「Hello World」Spark アプリケーションを実行して、問題が環境設定にあるのか、コードの複雑さやエラーが原因なのかを判断します。

  • バッチまたはセッションに指定されたすべてのアプリケーション JAR、Python ファイル、 または依存関係が Cloud Storage に正しく 配置され、 バッチまたはセッションのサービス アカウントからアクセスできることを確認します。

ログを確認する

バッチ作成の失敗を診断するうえで重要な手順は、 Cloud Logging の詳細ログを確認することです。

  1. [**Cloud Logging**] ページ をコンソールで開きます。 Google Cloud
  2. Apache Spark 向け Serverless バッチまたはセッションでフィルタします。
    1. [リソース] プルダウンで、Cloud Dataproc Batch または Cloud Dataproc Session を選択します。
    2. 失敗したバッチまたはセッションの batch_id または session_id でフィルタします。 project_idlocation(リージョン)でフィルタすることもできます。
  3. jsonPayload.component="driver". のログエントリを探します。これらのログには、600 秒のタイムアウトが発生する前に、ドライバの初期化の失敗の原因を特定できる特定のエラー メッセージやスタック トレースが 含まれていることがよくあります 。