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

gcpdiag ツールを使用する

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

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

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

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

gcpdiag コマンドを実行する

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

Google Cloud コンソール

  1. 次のコマンドを入力してコピーします。
  2. gcpdiag runbook dataproc/cluster-creation \
        --parameter project_id=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 \
        --parameter project_id=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)。アクセス制御用のファイアウォール ルールを追加します。