クラスタ作成に関する問題のトラブルシューティング

gcpdiag ツールを使用する

gcpdiag はオープンソースのツールです。正式にサポートされている Google Cloud プロダクトではありません。 gcpdiag ツールを使用すると、Google Cloud プロジェクトの問題を特定して修正できます。詳細については、GitHub の gcpdiag プロジェクトをご確認ください。

gcpdiag ツールは、次のチェックを実行して、Dataproc クラスタ作成に関する次の問題を検出するのに役立ちます。

  • 在庫切れエラー: ログ エクスプローラのログを評価して、リージョンとゾーンでの在庫切れを検出します。
  • 不十分な割り当て: Dataproc クラスタ プロジェクトの割り当てが使用可能かどうかを確認します。
  • 不完全なネットワーク構成: 必要なファイアウォール ルールと、外部および内部 IP の構成の確認など、ネットワーク接続テストを行います。クラスタが削除された場合、gcpdiag ツールはネットワーク接続チェックを実行できません。
  • プロジェクト間の構成が正しくない: プロジェクト間のサービス アカウントを確認し、追加のロールと組織のポリシーの適用を確認します。
  • 共有 VPC の IAM ロールがない: Dataproc クラスタが共有 VPC ネットワークを使用している場合は、必要なサービス アカウントのロールが追加されているかどうかを確認します。
  • 初期化アクションの失敗: ログ エクスプローラのログを評価して、初期化アクション スクリプトの失敗とタイムアウトを検出します。

gcpdiag クラスタ作成手順の一覧については、考えられる手順をご覧ください。

gcpdiag コマンドを実行する

gcpdiag コマンドは、Google Cloud コンソールの Cloud Shell から、または Docker コンテナ内で実行できます。

Google Cloud コンソール

  1. 次のコマンドを入力してコピーします。
  2. gcpdiag runbook dataproc/cluster-creation \
      --project=PROJECT_ID \
      --parameter cluster_name=CLUSTER_NAME \
      --parameter OPTIONAL_FLAGS
  3. Google Cloud コンソールを開き、Cloud Shell をアクティブにします。
  4. Cloud コンソールを開く
  5. コピーしたコマンドを貼り付けます。
  6. gcpdiag コマンドを実行します。gcpdiag Docker イメージがダウンロードされ、診断チェックが実行されます。該当する場合は、出力指示に従って失敗したチェックを修正します。

Docker

Docker コンテナで gcpdiag を起動するラッパーを使用して gcpdiag を実行できます。Docker または Podman がインストールされている必要があります。

  1. ローカル ワークステーションで次のコマンドをコピーして実行します。
    curl https://gcpdiag.dev/gcpdiag.sh >gcpdiag && chmod +x gcpdiag
  2. gcpdiag コマンドを実行します。
    ./gcpdiag runbook dataproc/cluster-creation \
      --project=PROJECT_ID \
      --parameter cluster_name=CLUSTER_NAME \
      --parameter OPTIONAL_FLAGS

このランブックで使用可能なパラメータを表示します。

以下を置き換えます。

  • PROJECT_ID: リソースを含むプロジェクトの ID
    • CLUSTER_NAME: プロジェクト内のターゲット Dataproc クラスタの名前
    • OPTIONAL_PARAMETERS: 次のオプション パラメータを 1 つ以上追加します。これらのパラメータは、クラスタが削除された場合に必要です。
      • cluster_uuid: プロジェクト内のターゲット Dataproc クラスタの UUID
      • service_account: Dataproc クラスタの VM サービス アカウント
      • subnetwork: Dataproc クラスタ サブネットワークのフル URI パス
      • internal_ip_only: 正/誤
      • cross_project: Dataproc クラスタが別のプロジェクトの VM サービス アカウントを使用している場合、プロジェクト間の ID

有用なフラグ:

すべての gcpdiag ツールのフラグの一覧と説明については、gcpdiag の使用手順をご覧ください。

クラスタ作成エラーを理解して修正する

このセクションでは、Dataproc のエラー メッセージとその一般的な原因、解決策を記載します。

  • オペレーション タイムアウト: 最低 2 つ必要な実行中のデータノード / ノード マネージャーが 0 個です

    原因: マスターノードが、ワーカーノードと通信できないためクラスタを作成できない。

    解決方法:

    • ファイアウォール ルールの警告を確認します。
    • 正しいファイアウォール ルールが設定されていることを確認します。詳細については、デフォルトの Dataproc ファイアウォール ルールの概要をご覧ください。
    • Google Cloud コンソールで接続テストを実行して、マスターノードとワーカーノード間の通信をブロックしているものを特定します
  • projects/{projectId}/regions/{region}/subnetworks/{subnetwork} に対して compute.subnetworks.use 権限が必要

    原因: このエラーは、別のプロジェクトの VPC ネットワークを使用して Dataproc クラスタを設定する際、ネットワークをホストする共有 VPC プロジェクトの Dataproc サービス エージェント サービス アカウントに必要な権限がない場合に発生します。

    解決策: 別のプロジェクトで VPC ネットワークを使用するクラスタを作成するの手順に沿って行います。

  • ゾーン projects/zones/{zone} には、リクエスト (resource type:compute) に対応できる十分なリソースがない

    原因: クラスタの作成に使用されているゾーンに十分なリソースがない。

    解決方法:

  • 割り当て超過エラー

    CPUS/CPUS_ALL_REGIONS の割り当てが不足しています
    「DISKS_TOTAL_GB」の割り当てが不足しています
    「IN_USE_ADDRESSES」の割り当てが不足しています

    原因: CPUディスク、または IP アドレスのリクエストが利用可能な割り当てを超えています。

    解決策: Google Cloud コンソール から追加の割り当てをリクエストします。

  • 初期化アクションの失敗

    原因: インストールがクラスタの作成時に指定された初期化アクションで失敗しました。

    解決方法:

  • ノード {cluster-name}: {component} を初期化できませんでした

    原因: Dataproc コンポーネントを初期化できなかった。

    解決策: 以下をご覧ください。

  • クラスタを作成できませんでした: IP アドレス空間の不足

    原因: リクエストされたクラスタノードをプロビジョニングするために必要な IP アドレス空間を使用できません。

    解決方法:

    • 別のサブネットワークまたはネットワークにクラスタを作成します。
    • ネットワークの使用量を減らして IP アドレス空間を解放します。
    • ネットワーク上で十分な IP 空間が使用可能になるまで待ちます。
  • 初期化スクリプトのエラー メッセージ: リポジトリ REPO_NAME にリリース ファイルがない

    原因: Debian の旧安定版のバックポート リポジトリが完全に削除された。

    解決方法:

    初期化スクリプトで、apt-get を実行するコードの前に次のコードを追加します。

    oldstable=$(curl -s https://deb.debian.org/debian/dists/oldstable/Release | awk '/^Codename/ {print $2}');
    stable=$(curl -s https://deb.debian.org/debian/dists/stable/Release | awk '/^Codename/ {print $2}');
    
    matched_files="$(grep -rsil '\-backports' /etc/apt/sources.list*)"
    if [[ -n "$matched_files" ]]; then
      for filename in "$matched_files"; do
        grep -e "$oldstable-backports" -e "$stable-backports" "$filename" || \
          sed -i -e 's/^.*-backports.*$//' "$filename"
      done
    fi
    
  • ネットワークにアクセスできません: dataproccontrol-REGION.googleapis.com/...*

    原因: Dataproc クラスタの VPC ネットワークに、必要なインターネットへのルートがない可能性があります。クラスタ VM で実行されている Dataproc エージェントから Dataproc Control API にアクセスしてジョブを取得し、ステータスを報告するには、インターネットへのルートが必要です。インターネットへのシステム生成のデフォルト ルートが削除された可能性があります。

    解決方法:

    --next-hop-gateway=default-internet-gateway を指定して、インターネットへのルートをクラスタ VPC ネットワークに追加します(IPv4 の場合は 0.0.0.0/0IPv6 の場合は ::/0)。アクセス制御用のファイアウォール ルールを追加します。