Dataproc セカンダリ ワーカー

Dataproc クラスタは、標準的な Compute Engine VM を Dataproc ワーカー(「プライマリ」ワーカーと呼びます)として使用するだけでなく、secondary ワーカーも使用できます。

次のルールは、Dataproc クラスタ内のすべてのセカンダリ ワーカーに適用されます。

  • 処理のみ - セカンダリ ワーカーはデータを保存しません。これらは、処理ノードとしてのみ機能します。そのため、セカンダリ ワーカーを使用すると、ストレージをスケールすることなく、コンピューティングをスケールできます。

  • セカンダリ ワーカーのみのクラスタはゼロ: クラスタにはプライマリ ワーカーが必要です。クラスタを作成し、プライマリ ワーカーの数を指定しない場合、Dataproc によって 2 つのプライマリ ワーカーがクラスタに追加されます。

  • マシンタイプ - デフォルトでは、セカンダリ ワーカーはクラスタのプライマリ ワーカーのマシンタイプを使用します。たとえば、n1-standard-4 マシンタイプを使用するプライマリ ワーカーでクラスタを作成した場合、デフォルトでは、クラスタに追加したすべてのセカンダリ ワーカーも n1-standard-4 マシンを使用します。

    セカンダリ ワーカーにデフォルトのプライマリ ワーカー マシンタイプを使用する代わりに、セカンダリ ワーカーに 1 つ以上のランク付けされたマシンタイプ リストを指定できます。詳細については、Dataproc フレキシブル VM をご覧ください。

  • 永続ディスクサイズ - デフォルトとして、すべてのセカンダリ ワーカーが 1, 000 GB またはプライマリ ワーカーのブート ディスク サイズのいずれか小さい方で作成されます。このディスク容量は、データをローカルのキャッシュに保存するために使用され、HDFS では使用できません。 クラスタ作成時に gcloud dataproc clusters create --secondary-worker-boot-disk-size コマンドを使用して、デフォルトのディスクサイズをオーバーライドできます。このフラグは、クラスタの作成時にセカンダリ ワーカーが割り当てられなかった場合でも指定できます。

  • 非同期作成 - クラスタの作成またはスケーリングによってセカンダリ ワーカーを追加する場合、セカンダリ ワーカーは、作成または更新のオペレーションが完了するまでプロビジョニングされません。これは、Dataproc はプロビジョニングが可能になり次第 VM を非同期に作成し、マネージド インスタンス グループ(MIG)を使用してセカンダリ ワーカーを管理するためです(マネージド インスタンスのステータスの確認をご覧ください)。

プリエンプティブルと非プリエンプティブル セカンダリ ワーカー

セカンダリ ワーカーには、Spot VM、標準プリエンプティブル VM非プリエンプティブル VM の 3 種類があります。デフォルトの Dataproc セカンダリ ワーカーのタイプは、標準プリエンプティブル VM です。Spot と非プリエンプティブル セカンダリ ワーカーの組み合わせを指定できます。

例: クラスタを作成するときに 3 つのセカンダリ ワーカーを選択した場合は、3 つの Spot VM、3 つのプリエンプティブル VM、3 つの非プリエンプティブル VM、または Spot ワーカーと非プリエンプティブル ワーカーの組み合わせを指定できます。

プリエンプティブル ワーカー

  • プリエンプティブル ワーカーの削除の可能性はジョブの安定性に影響を及ぼす可能性がありますが、プリエンプティブル インスタンスを使用して、重要性の低いデータ処理の 1 時間あたりの計算費用の削減や、非常に大規模なクラスタの低総費用での作成ができます(Google Cloud 料金計算ツールを使用して費用を見積もることができます)。

  • 最適な結果を得るには、クラスタ内のプリエンプティブル ワーカーの数を、クラスタ内のワーカー数の合計(プライマリ ワーカーとすべてのセカンダリ ワーカー)の 50% 未満にする必要があります。

  • プリエンプティブル ワーカーを使用する場合は、非プリエンプティブル ワーカーで実行されるジョブと比較して、ジョブの一時的な単一ワーカータスクの失敗が多くなります。低レベルのタスクの失敗に対するジョブの許容度を上げるには、クラスタの自動スケーリングで使用されるデフォルトのプロパティ値と同様のクラスタ プロパティ値を設定して、タスクの再試行の最大回数を増やし、ジョブの失敗を回避することが可能です。

  • コスト節減の検討事項: プリエンプティブル VM を使用しても、プリエンプションによってジョブの実行時間が長くなり、ジョブの費用が高くなる可能性があるため、必ずしもコスト削減につながるわけではありません。プリエンプティブル VM で高度な柔軟性モード(EFM)を使用すると、この影響を軽減できますが、プリエンプティブル VM の全体的なコスト削減はユースケースによって異なります。一般的に、有効期間が短いジョブの方が、ジョブ実行中のプリエンプションの可能性が低いため、プリエンプティブル VM の使用に適しています。非プリエンプティブル VM や EFM を使用するプリエンプティブル VM など、さまざまなジョブ オプションを試して、費用の見積もりを行い、最適なソリューションを見つけてください。

非プリエンプティブル ワーカー

セカンダリ ワーカーを選択する

Google Cloud コンソールgcloud CLI、または Dataproc API を使用してクラスタを作成するときに、セカンダリ ワーカーの数とタイプを指定できます。

  • スポットと非プリエンプティブル セカンダリ ワーカーを混在させることができます。
  • 作成後にクラスタを更新して、クラスタ内のセカンダリ ワーカーの数を変更できますが、セカンダリ ワーカーのタイプは変更できません。
  • ラベルの更新は、24 時間以内にすべてのプリエンプティブル セカンダリ ワーカーに反映されます。ラベルの更新はプリエンプティブルでない既存のセカンダリ ワーカーには反映されません。ラベルの更新は、ラベル更新のにクラスタに追加されたすべてのワーカーに伝搬されます。たとえば、クラスタをスケールアップすると、すべての新しいプライマリ ワーカーとセカンダリ ワーカーに新しいラベルが付けられます。

コンソール

Google Cloud コンソールから Dataproc クラスタを作成する際に、セカンダリ ワーカーの数を指定できます。クラスタを作成したら、Google Cloud コンソールからクラスタ構成を編集して、セカンダリ ワーカーの追加や削除を行います。

セカンダリ ワーカーを含むクラスタを作成する

Google Cloud コンソールの Dataproc [クラスタの作成] ページの [ノードの構成] パネルの [セカンダリ ワーカーノード] セクションから、新しいクラスタに適用するセカンダリ ワーカーの数とタイプを設定します。[セカンダリ ワーカー ノード] フィールドと [プリエンプティブル] フィールドに、セカンダリ ワーカーの数とタイプをそれぞれ指定します。

セカンダリ インスタンスを使用してクラスタを更新する

クラスタ内のセカンダリ ワーカー数を更新するには、 Google Cloud コンソールの [クラスタ] ページでクラスタ名をクリックします。[クラスタの詳細] ページで、[構成] タブをクリックし、[編集] をクリックして [セカンダリ ワーカーノード] フィールドの番号を更新します。

クラスタからすべてのセカンダリ インスタンスを削除する

クラスタからすべてのセカンダリ ワーカーを削除するには、[セカンダリ ワーカーノード] フィールドに 0 を指定して、先ほどの説明のとおりにクラスタ構成を更新します。

Google Cloud CLI コマンド

gcloud dataproc clusters create コマンドを使用して、クラスタの作成時にセカンダリ ワーカーをクラスタに追加します。クラスタの作成後に、gcloud dataproc clusters update コマンド(更新できるセカンダリ ワーカーのタイプではなく、数値)を使用して、セカンダリ ワーカーをクラスタから追加または削除できます。

セカンダリ ワーカーを含むクラスタを作成する

セカンダリ ワーカーを持つクラスタを作成するには、--num-secondary-workers 引数を持つ gcloud dataproc clusters create コマンドを使用します。セカンダリ ワーカーは、デフォルトでは標準プリエンプティブル VM です。クラスタの作成時に、--secondary-worker-type フラグを `non-preemptible` または `spot` に設定すると、非プリエンプティブルまたは Spot のセカンダリ ワーカーを指定できます。次の例は、各セカンダリ ワーカー タイプ(`preemptible`(デフォルト)、Spot(プリエンプティブル)、非プリエンプティブル)を使用してクラスタを作成する方法を示しています。追加のフラグを使用して、スポットと非プリエンプティブル セカンダリ ワーカーを混在させることができます。

例 1

次のコマンドは、2 つの標準プリエンプティブル(デフォルト タイプ)セカンダリ ワーカーを持つ「cluster1」を作成します。

gcloud dataproc clusters create cluster1 \
    --num-secondary-workers=2 \
    --region=us-central1
例 2

次のコマンドは、secondary-worker-type フラグを使用して 2 つの Spot(プリエンプティブル)セカンダリ ワーカーを持つ「cluster2」を作成します。

gcloud dataproc clusters create cluster2 \
    --num-secondary-workers=2 \
    --secondary-worker-type=spot \
    --region=us-central1

例 3

次のコマンドは、secondary-worker-type フラグを使用して 2 つの非プリエンプティブルセカンダリ ワーカーを持つ「cluster3」を作成します。

gcloud dataproc clusters create cluster3 \
    --num-secondary-workers=2 \
    --secondary-worker-type=non-preemptible \
    --region=us-central1
セカンダリ ワーカーのブートディスクのサイズを変更します。デフォルトでは、すべてのセカンダリ ワーカーが 1, 000 GB またはプライマリ ワーカーのブート ディスク サイズのいずれか小さい方で作成されます。このディスク容量は、データをローカルのキャッシュに保存するために使用され、HDFS では使用できません。クラスタ作成時に gcloud dataproc clusters create --secondary-worker-boot-disk-size コマンドを使用して、デフォルトのディスクサイズをオーバーライドできます。このフラグは、クラスタの作成時にセカンダリ ワーカーが割り当てられなかった場合でも指定できます。 Google Cloud コンソールにクラスタ作成リクエストを作成させるDataproc の [クラスタの作成] ページの左パネルの下部にある [ 同等の REST またはコマンドライン] リンクをクリックすると、 Google Cloud コンソールにより同等の API REST リクエストまたは gcloud ツールコマンドが作成されます。

セカンダリ ワーカーを含むクラスタを更新する

セカンダリ ワーカーを追加または削除するクラスタを更新するには、--num-secondary-workers フラグを指定して gcloud dataproc clusters update コマンドを使用します。


次のコマンドは、4 つのセカンダリ ワーカー(デフォルト タイプまたはクラスタ作成時に指定したタイプ)を使用するように example-cluster を更新します。

gcloud dataproc clusters update example-cluster \
    --num-secondary-workers=4 \
    --region=us-central1

クラスタからすべてのセカンダリ ワーカーを削除する

クラスタからすべてのセカンダリ ワーカーを削除するには、--num-secondary-workers0 に設定して gcloud dataproc clusters update コマンドを使用します。


次のコマンドは、「example-cluster」からすべてのセカンダリ ワーカーを削除します。

gcloud dataproc clusters update example-cluster \
    --num-secondary-workers=0 \
    --region=us-central1

REST API

セカンダリ ワーカーを含むクラスタを作成する

Dataproc clusters.create API を使用して、クラスタの作成時にセカンダリ ワーカーをクラスタに追加します。次の例は、各セカンダリ ワーカータイプpreemptible(デフォルト)、spot(プリエンプティブル)、non-preemptible)を使用してクラスタを作成する方法を示しています。追加のフィールドを使用して、スポットと非プリエンプティブルのセカンダリ ワーカーを混在させることができます。

例 1

次の POST リクエストは、2 つの標準プリエンプティブル(デフォルト タイプ)VM ワーカーを持つ「cluster1」を作成します。


POST https://dataproc.googleapis.com/v1/projects/project-id/regions/region/clusters

{
  "clusterName": "cluster1",
  "config": {
    "secondaryWorkerConfig": {
      "numInstances": 2
    }
  }
}
例 2

次の POST リクエストは、2 つの Spot(プリエンプティブル)VM ワーカーを持つ「cluster2」を作成します。


POST https://dataproc.googleapis.com/v1/projects/project-id/regions/region/clusters

{
  "clusterName": "cluster2",
  "config": {
    "secondaryWorkerConfig": {
      "numInstances": 2,
      "preemptibility": "SPOT"
    }
  }
}

例 3

次の POST リクエストは、2 つの非プリエンプティブル セカンダリ ワーカーを持つ「cluster3」を作成します。


POST https://dataproc.googleapis.com/v1/projects/project-id/regions/region/clusters

{
  "clusterName": "cluster3",
  "config": {
    "secondaryWorkerConfig": {
      "numInstances": 2,
      "preemptibility": "NON_PREEMPTIBLE"
    }
  }
}

セカンダリ ワーカーを含むクラスタを更新する

Dataproc clusters.patch API を使用して、セカンダリ ワーカーを追加および削除します。


次の PATCH リクエストは、4 つのセカンダリ ワーカー(デフォルト タイプまたはクラスタ作成時に指定したタイプ)を持つようにクラスタを更新します。


PATCH /v1/projects/project-id/regions/region/clusters/cluster-name?updateMask=config.secondary_worker_config.num_instances
{
  "config": {
    "secondaryWorkerConfig": {
      "numInstances": 4
    }
  }
}
Google Cloud コンソールにクラスタ作成リクエストを作成させます。Dataproc の [クラスタの作成] ページの左パネルの下部にある [ 同等の REST またはコマンドライン] リンクをクリックすると、 Google Cloud コンソールにより同等の API REST リクエストまたは gcloud CLI コマンドが作成されます。

セカンダリ ワーカーのトラブルシューティング

  • サービス アカウントの権限に関する問題: セカンダリ ワーカーはマネージド インスタンス グループを介して作成されます。権限に問題がある場合、Dataproc ログにはセカンダリ ワーカーの作成失敗は報告されませんが、失敗したワーカーはGoogle Cloud コンソールの [クラスタの詳細] ページの [VM インスタンス] タブに緑色のチェックマークなしで表示されます。リストを表示するには、Dataproc の [クラスタ] ページを開き、クラスタ名をクリックして、クラスタの [クラスタの詳細] ページを開きます。

  • マネージド インスタンス グループの権限の問題: マネージド インスタンス グループの権限に問題があるかどうかを確認するには:

    1. マネージド インスタンス グループの名前(instanceGroupManagerName)を見つけます。

      コンソール

      1. Dataproc の [クラスタ] ページを開き、クラスタ名をクリックして、クラスタの [クラスタの詳細] ページを開きます。
      2. ページの下部にある [同等の REST] をクリックし、config.secondaryWorkerConfig.managedGroupConfig.instanceGroupManagerName 値を確認します。

      Google Cloud CLI

      --format フラグを指定して gcloud dataproc clusters describe コマンドを実行し、instanceGroupManagerName を表示します。
      gcloud dataproc clusters describe CLUSTER_NAME \
          --region=REGION \
          --format='value(config.secondaryWorkerConfig.managedGroupConfig.instanceGroupManagerName)'
      

      REST API

      clusters.get リクエストを送信して、config.secondaryWorkerConfig.managedGroupConfig.instanceGroupManagerName の値を返します。
    2. ログ エクスプローラでログを表示します。
    • Google Compute Engine Instance Group リソースタイプを選択し、マネージド インスタンス グループ名でフィルタします。

    • または、`resource.type="gce_instance_group" と resource.labels.instance_group_name=INSTANCE_GROUP_MANAGER_NAME のロギング フィルタを適用することもできます。

スポットと非プリエンプティブル セカンダリ ワーカーを混在させる

Dataproc クラスタの作成時に、スポットと非プリエンプティブルのセカンダリ ワーカーを組み合わせて指定できます。

Spot と非プリエンプティブル セカンダリ ワーカーを混在させるセカンダリ ワーカーの設定

Dataproc クラスタを作成するときに次のセカンダリ ワーカー設定を使用すると、Spot VM が使用可能なときに容量を増やすことができる最小レベルのセカンダリ ワーカー容量を取得できます。

  • セカンダリ ワーカー数: プロビジョニングするセカンダリ ワーカーの合計数。

  • セカンダリ ワーカー タイプ: Spot と非プリエンプティブル セカンダリ ワーカーを混在させる場合、spot はセカンダリ ワーカー タイプです。

  • standardCapacityBase: プロビジョニングする非プリエンプティブル(標準)セカンダリ ワーカーの数。非プリエンプティブル セカンダリ ワーカーは、他のタイプのセカンダリ ワーカーよりも先にプロビジョニングされます。

  • standardCapacityPercentAboveBase: standardCapacityBase 個のセカンダリ ワーカーが満たされた後、リクエストされたセカンダリ ワーカーの合計数を満たすために必要な残りのセカンダリ ワーカーの数は、次のように非プリエンプティブル VM と Spot VM の組み合わせで満たされます。

    • standardCapacityPercentAboveBase: 残りのセカンダリ ワーカーのうち、プリエンプティブルでない VM で埋める割合。
    • リクエストされたセカンダリ ワーカーの合計数を満たすために必要な残りの数は、スポット VM で埋められます。

例:

  • セカンダリ ワーカーの数: 15
  • standardCapacityBase: 5
  • standardCapacityPercentAboveBase 30%

結果:

  • プリエンプティブルでない: 8 = 5(standardCapacityBase)+ 3(残りの 10 の 30%)
  • スポット: 7(残りの 10 の 70%)
  • 合計 = 15

スポット セカンダリ ワーカーと非プリエンプティブル セカンダリ ワーカーを組み合わせてクラスタを作成する

クラスタの作成時に、gcloud CLI または Dataproc API を使用して、スポットと非プリエンプティブル セカンダリ ワーカーを混在させることができます。

gcloud

ローカルまたは Cloud Shell で次のコマンドを実行して、Spot と非プリエンプティブル セカンダリ ワーカーが混在するクラスタを作成します。

gcloud dataproc clusters create CLUSTER_NAME \
    --project=PROJECT_ID \
    --region=REGION \
    --secondary-worker-type=spot \
    --num-secondary-workers=NUMBER_SECONDARY_WORKERS \
    --secondary-worker-standard-capacity-base=STANDARD_CAPACITY_BASE \
    --secondary-worker-standard-capacity-percent-above-base=STANDARD_CAPACITY_PERCENT_ABOVE_BASE \
    OTHER_FLAGS_AS_NEEDED

注:

API

スポットとプリエンプティブルでないセカンダリ ワーカーを混在させるには、次の JSON サンプルに示すように、cluster.create リクエストの一部として Dataproc preemptibilitystandardCapacityBasestandardCapacityPercentAboveBase API フィールドを設定します。

{
  "clusterName": "CLUSTER_NAME",
  "config": {
    "secondaryWorkerConfig": {
      "numInstances": 15,
      "preemptibility": "spot",
      "instanceFlexibilityPolicy": {
        "provisioningModelMix": {
          "standardCapacityBase": STANDARD_CAPACITY_BASE
          "standardCapacityPercentAboveBase": STANDARD_CAPACITY_PERCENT_ABOVE_BASE
        }
      }
    }
  }
}

注:

セカンダリ ワーカーの混合とフレキシブル VM を組み合わせる

クラスタの作成時に、Spot と非プリエンプティブルのセカンダリ ワーカーを混在させ、セカンダリ ワーカーにフレキシブル VM シェイプを指定できます。

gcloud CLI の例:

gcloud dataproc clusters create cluster-name \
    --project=project-id \
    --region=us-central1 \
    --secondary-worker-type=spot \
    --num-secondary-workers=15 \
    --secondary-worker-standard-capacity-base=5 \
    --secondary-worker-standard-capacity-percent-above-base=30 \
    --secondary-worker-machine-types="type=n2-standard-8,rank=0" \
    --secondary-worker-machine-types="type=e2-standard-8,type=t2d-standard-8,rank=1"
    ...other flags as needed

セカンダリ ワーカーの混合特性

このセクションでは、スポット セカンダリ ワーカーと非プリエンプティブル セカンダリ ワーカーを混在させることに関連する動作と特性について説明します。

セカンダリ ワーカーの設定

Dataproc は、セカンダリ ワーカーでアプリケーションをスケジュールするときに、スポット VM と非プリエンプティブル VM のどちらかを優先することはありません。

セカンダリ ワーカーのスケーリング

セカンダリ ワーカーが自動スケーリングまたは手動スケーリングによってスケーリングされる場合、Dataproc はセカンダリ ワーカーを追加するときに、リクエストされたスポットと非プリエンプティブルの比率を維持します。

セカンダリ ワーカーのミックス設定を更新する

スポット セカンダリ ワーカーと非プリエンプティブル セカンダリ ワーカーの組み合わせは、Dataproc クラスタの作成時に指定します。クラスタの作成後にセカンダリ ワーカーの組み合わせ設定を変更することはできません。

Spot セカンダリ ワーカーのプリエンプション

  • Dataproc は、Spot VM のプリエンプションのタイミングを制御しません(Spot VM のプリエンプションをご覧ください)。
  • スポット プリエンプションが発生すると、Compute Engine がプリエンプトされた VM を再プロビジョニングするまで、セカンダリ ワーカー グループは容量を減らして一時的に実行できます。
  • Dataproc は、グループの初期設定を超える容量をセカンダリ ワーカー グループに追加しません。