このドキュメントでは、Managed Service for Apache Spark の Spark バッチ ワークロードとインタラクティブ セッションが起動しない一般的な問題のトラブルシューティングについて説明します。
概要
通常、バッチまたはセッションの起動に失敗すると、次のエラー メッセージが報告されます。
Driver compute node failed to initialize for batch in 600 seconds
このエラー メッセージは、Spark ドライバがデフォルトのタイムアウト時間である 600 秒(10 分)以内に起動できなかったことを示しています。 一般的な原因は、サービス アカウントの権限、リソースの可用性、ネットワーク構成、Spark プロパティに関連しています。
バッチとセッションの起動失敗の原因とトラブルシューティングの手順
以降のセクションでは、バッチとセッションの起動失敗の一般的な原因と、問題の解決に役立つトラブルシューティングのヒントを示します。
サービス アカウントの権限が不足している
Managed Service for Apache Spark バッチまたはセッションで使用されるサービス アカウントには、Managed Service for Apache Spark オペレーションの権限とリソースへのアクセス権を含む特定の IAM ロール が必要です。 Google Cloud サービス アカウントに必要なロールがない場合、バッチまたはセッションの Spark ドライバを初期化できないことがあります。
- 必要なワーカーロール: バッチまたはセッションのサービス アカウントには、Managed Service for Apache Spark ワーカーロール (
roles/dataproc.worker)が必要です。このロールには、Managed Service for Apache Spark がコンピューティング リソースをプロビジョニングして管理するために必要な最小限の権限が含まれています。 - データアクセス権限: 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 のデフォルト サービス アカウントがデフォルトになります。
- コンソールの [IAM と管理] > [IAM] ページに移動し、バッチまたはセッションのサービス アカウントを見つけて、 オペレーションに必要なロールがあることを確認します。 Google Cloud 不足しているロールを付与します。
割り当て不足
Managed Service for Apache Spark やその他の Google Cloud リソースのプロジェクトまたはリージョン固有の割り当てを超えると、新しいバッチやセッションを開始できなくなることがあります。
トラブルシューティングのヒント:
Managed Service for 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 の詳細ログを確認することです。
- [**Cloud Logging**] ページ をコンソールで開きます。 Google Cloud
- Managed Service for Apache Spark バッチまたはセッションでフィルタします。
- [リソース] プルダウンで、
Cloud Managed Service for Apache Spark BatchまたはCloud Managed Service for Apache Spark Sessionを選択します。 - 失敗したバッチまたはセッションの
batch_idまたはsession_idでフィルタします。project_idとlocation(リージョン)でフィルタすることもできます。
- [リソース] プルダウンで、
jsonPayload.component="driver". を含むログエントリを探します。これらのログには、600 秒のタイムアウトが発生する前に、ドライバの初期化の失敗の原因を特定できる特定のエラー メッセージやスタック トレースが含まれていることがよくあります。