プリエンプティブル VM

Dataproc クラスタでは、標準の Compute Engine 仮想マシン(VM)に加え、プリエンプティブル VM とも呼ばれるプリエンプティブル VM インスタンスを使用できます。プリエンプティブル ワーカーは、他のタスクで Google Cloud が必要とする場合に、再利用(クラスタから削除)されます。プリエンプティブル ワーカーを削除するとジョブの安定性に影響を及ぼす可能性がありますが、重要性の低いデータ処理の 1 時間あたりの計算費用や大規模なクラスタの作成にかかる総費用を低く抑える必要がある場合は、プリエンプティブル インスタンスを使用できます。詳しくは、Dataproc の料金に関するドキュメントをご覧ください。

Dataproc を使用したプリエンプティブルの仕組み

クラスタに追加されたすべてのセカンダリ ワーカーは、クラスタのプライマリ ワーカーノードのマシンタイプを使用します。たとえば、n1-standard-4 マシンタイプを使用するプライマリ ワーカーを含めてクラスタを作成した場合、クラスタに追加したすべてのセカンダリ ワーカーも n1-standard-4 マシンを使用します。

プリエンプティブル ワーカーは、他のタスクで Google Cloud が必要とする場合に再利用され、容量の許す限り、クラスタに再び追加されます。 たとえば、2 つのプリエンプティブル マシンが再利用され、クラスタから削除された場合、この 2 つのインスタンスは再追加できるだけの容量が使用できるようになったときにクラスタに再追加されます。

Dataproc クラスタ内のすべてのセカンダリ ワーカー(プリエンプティブルと非プリエンプティブル)には、次のルールが適用されます。

  • 処理のみ - セカンダリ ワーカーはデータを保存しません。これらは、処理ノードとしてのみ機能します。

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

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

クラスタでのプリエンプティブの使用

Cloud SDK gcloud コマンドライン ツールを使用するか、または Google Cloud Console から、Dataproc API リクエストによりクラスタを作成する場合、セカンダリ ワーカー(プリエンプティブルまたは非プリエンプティブル)の数とタイプを指定できます。

注:

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

gcloud コマンド

クラスタを作成するときに、クラスタにプリエンプティブル インスタンスを追加するには、gcloud dataproc clusters create コマンドを使用します。クラスタの作成後にプリエンプティブル インスタンスを追加または削除するには、gcloud dataproc clusters update コマンドを使用します。

プリエンプティブル ワーカーを含むクラスタの作成

プリエンプティブル ワーカーを含むクラスタを作成するには、--num-secondary-workers 引数を指定して gcloud dataproc clusters create コマンドを使用します。セカンダリ ワーカーはデフォルトでプリエンプティブルなことに注意してください。ただし、クラスタの作成時に --secondary-worker-type=non-preemptible を設定すると、非プリエンプティブルのセカンダリ ワーカーを追加できます(例 2 を参照)。

例 1

次のコマンドは、2 つのプリエンプティブル ワーカーがある「my-test-cluster」という名前のクラスタを作成します。

gcloud dataproc clusters create my-test-cluster \
    --num-secondary-workers=2 \
    --region=us-central1
...
Waiting on operation [operations/projects/project-id/operations/...].
clusterName: my-test-cluster
  ...
secondaryWorkerConfiguration:
    - dataproc-1-sw-2skd
    - dataproc-1-sw-l20p
    isPreemptible: true
...

例 2

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

gcloud dataproc clusters create my-test-cluster \
    --num-secondary-workers=2 \
    --secondary-worker-type=non-preemptible \
    --region=us-central1

セカンダリ ワーカーを持つクラスタの更新

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


次のコマンドは、2 つのセカンダリ ワーカーを使用するように名前が「my-test-cluster」のクラスタを更新します。

gcloud dataproc clusters update my-test-cluster \
    --num-secondary-workers=2 \
    --region=us-central1
...
Waiting on operation [operations/projects/project-id/operations/...].
Waiting for cluster update operation...done.
Updated [https://dataproc.googleapis.com/...].
clusterName: my-test-cluster
  ...
secondaryWorkerConfiguration:
    - dataproc-1-sw-2skd
    - dataproc-1-sw-l20p
    isPreemptible: true
...

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

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


次のコマンドは、クラスタからすべてのセカンダリ ワーカーを削除します。

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

REST API

プリエンプティブル ワーカーを含むクラスタの作成

Dataproc clusters.create API を使用して、クラスタの作成時にプリエンプティブル ワーカーをクラスタに追加します。セカンダリ ワーカーはデフォルトではプリエンプティブルですが、例 2 に示すように、非プリエンプティブルのセカンダリ ワーカーをクラスタに追加できます。

例 1

次の POST リクエストは、2 つのプリエンプティブル ワーカーがあるクラスタを作成します。


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

{
  "clusterName": "cluster-name",
  "config": {
    "secondaryWorkerConfig": {
      "numInstances": 2
    }
  }
}

例 2

次の POST リクエストは、2 つの非プリエンプティブル セカンダリ ワーカーがあるクラスタを作成します。


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

{
  "clusterName": "cluster-name",
  "config": {
    "secondaryWorkerConfig": {
      "numInstances": 2,
      "preemptibility": "NON_PREEMPTIBLE"
    }
  }
}

プリエンプティブル インスタンスがあるクラスタの更新

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


次の PATCH リクエストは、2 つのセカンダリ ワーカーを持つようにクラスタを更新します。


PATCH /v1/projects/project-id/regions/region/clusters/cluster-name?updateMask=config.secondary_worker_config.num_instances
{
  "config": {
    "secondaryWorkerConfig": {
      "numInstances": 2
    }
  }
}

コンソール

Cloud Console から Dataproc クラスタを作成する際に、プリエンプティブル ワーカーの数を指定できます。クラスタを作成したら、Cloud Console からクラスタ構成を編集して、プリエンプティブル ワーカーの追加や削除を行います。

プリエンプティブル インスタンスがあるクラスタの作成

Cloud Console で Dataproc の [クラスタの作成] ページで「プリエンプティブル ワーカー、バケット、ネットワーク、バージョン、初期化オプション、アクセス オプション」というタイトルの展開パネルを開きます。

新しいクラスタにプリエンプティブ ワーカーを追加するには、[Nodes] 項目に正数を指定します。

プリエンプティブル インスタンスがあるクラスタの更新

クラスタを作成した後でクラスタ内のプリエンプティブル ワーカーの数を編集するには、[クラスタの詳細] ページの [構成] タブにある [編集] ボタンをクリックします。

プリエンプティブル ワーカーの数を変更するには、[プリエンプティブル ワーカーノード] 項目に新しい値を指定します。

クラスタからすべてのプリエンプティブル インスタンスを削除する

クラスタからすべてのプリエンプティブル インスタンスを削除するには、[プリエンプティブル ワーカーノード] 項目で 0 を指定し、上記のようにクラスタ構成を更新します。