このドキュメントでは、Google Cloud Apache Spark 向け Serverless の Spark バッチ ワークロードとインタラクティブ セッションの起動を妨げる一般的な問題のトラブルシューティングについて説明します。
概要
通常、バッチまたはセッションの開始に失敗すると、次のエラー メッセージが報告されます。
Driver compute node failed to initialize for batch in 600 seconds
このエラー メッセージは、Spark ドライバがデフォルトのタイムアウト時間(600 秒、10 分)内に起動できなかったことを示します。一般的な原因は、サービス アカウントの権限、リソースの可用性、ネットワーク構成、Spark プロパティに関連しています。
バッチとセッションの開始失敗の原因とトラブルシューティングの手順
以降のセクションでは、バッチとセッションの開始が失敗する一般的な原因と、問題の解決に役立つトラブルシューティングのヒントについて説明します。
サービス アカウントの権限が不足している
Apache Spark 用サーバーレス バッチまたはセッションで使用されるサービス アカウントには、Apache Spark 用サーバーレスのオペレーションと Google Cloud リソースへのアクセス権限を含む特定の IAM ロールが必要です。サービス アカウントに必要なロールがない場合、バッチまたはセッションの 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 Storage: 読み取りには
- ロギング権限: サービス アカウントには、Cloud Logging にログを書き込む権限を持つロールが必要です。通常は、
Logging Writerロール(roles/logging.logWriter)で十分です。
トラブルシューティングのヒント:
- バッチまたはセッションのサービス アカウントを特定します。指定しない場合、デフォルトは Compute Engine のデフォルト サービス アカウントです。
- Google Cloud コンソールの [IAM と管理] > [IAM] ページに移動し、バッチまたはセッションのサービス アカウントを見つけて、オペレーションに必要なロールがあることを確認します。不足しているロールを付与します。
割り当て不足
Google Cloud Apache Spark 向け Serverless または他の Google Cloud リソースのプロジェクトまたはリージョン固有の割り当てを超えると、新しいバッチやセッションが開始されなくなる可能性があります。
トラブルシューティングのヒント:
Google Cloud Apache Spark 用サーバーレスの割り当てページで、同時バッチ、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.memoryとspark.driver.coresの値を確認します。妥当な範囲内であり、利用可能な DCU と一致していることを確認します。これらのプロパティの値が大きすぎると、リソースの枯渇や初期化の失敗につながる可能性があります。デバッグを簡素化するために、不要な Spark プロパティや試験運用中の Spark プロパティを削除します。「Hello World」Spark アプリケーションを実行して、問題が環境設定にあるのか、コードの複雑さやエラーによるものなのかを判断します。
バッチまたはセッション用に指定されたすべてのアプリケーション JAR、Python ファイル、依存関係が Cloud Storage に正しく配置され、バッチまたはセッションのサービス アカウントからアクセスできることを確認します。
ログを確認する
バッチ作成の失敗を診断するうえで重要な手順は、Cloud Logging の詳細なログを調べることです。
- Google Cloud コンソールの [Cloud Logging] ページに移動します。
- Serverless for Apache Spark バッチまたはセッションのフィルタ:
- [リソース] プルダウンで、
Cloud Dataproc BatchまたはCloud Dataproc Sessionを選択します。 - 失敗したバッチまたはセッションの
batch_idまたはsession_idでフィルタします。project_idとlocation(リージョン)でフィルタすることもできます。
- [リソース] プルダウンで、
jsonPayload.component="driver"を含むログエントリを探します。これらのログには、600 秒のタイムアウトが発生する前にドライバの初期化が失敗した理由を特定できる特定のエラー メッセージやスタック トレースが含まれていることがよくあります。