クラスタのスケーリング

Cloud Dataproc クラスタを作成した後、クラスタ内のプライマリ ワーカーノードまたはセカンダリ ワーカーノードの数を増減することで、クラスタを調整(「スケール」)できます。Cloud Dataproc クラスタは、クラスタでジョブを実行している場合も含めいつでもスケールできます。

Cloud Dataproc クラスタをスケールする理由は、次のとおりです。

  1. ワーカーの数を増やしてジョブの実行時間を短縮するため
  2. ワーカーの数を減らして費用を節減するため(進行中の作業が失われないようにクラスタを小さくする場合に使用するオプションとしては、正常なデコミッションをご覧ください)。
  3. ノードの数を増やして使用可能な Hadoop Distributed Filesystem(HDFS)ストレージを拡大するため

クラスタは何度でもスケールできるため、一度にまとめてクラスタサイズを増減し、その後様子を見ながら増減して調整することをおすすめします。

スケーリングの使用

Cloud Dataproc クラスタをスケールするには、次の 3 つの方法があります。

  1. Google Cloud SDK の gcloud コマンドライン ツールを使用します。
  2. Google Cloud Platform Console でクラスタ構成を編集します。
  3. REST API を使用します。

新しくクラスタに追加したワーカーでは、既存のワーカーと同じマシンタイプが使用されます。たとえば、ワーカーのマシンタイプを n1-standard-8 にしてクラスタを作成した場合、新しく追加するワーカーのマシンタイプも n1-standard-8 になります。

プライマリ ワーカーの数またはセカンダリ(プリエンプティブ)ワーカーの数、あるいはその両方をスケールできます。たとえば、プリエンプティブ ワーカーの数だけをスケールした場合、プライマリ ワーカーの数は同じままです。

gcloud

gcloud dataproc clusters update でクラスタをスケーリングするには、次のコマンドを実行します。
gcloud dataproc clusters update cluster-name \
    [--num-workers and/or --num-preemptible-workers] new-number-of-workers
cluster-name は更新するクラスタの名前で、new-number-of-workers は更新後のプライマリ ワーカーノードやセカンダリ ワーカーノードの数です。 たとえば、5 つのプライマリ ワーカーノードを使用するように「dataproc-1」という名前のクラスタをスケールするには、次のコマンドを実行します。
gcloud dataproc clusters update dataproc-1 --num-workers 5
Waiting on operation [operations/projects/project-id/operations/...].
Waiting for cluster update operation...done.
Updated [https://dataproc.googleapis.com/...].
clusterName: my-test-cluster
...
  masterDiskConfiguration:
    bootDiskSizeGb: 500
  masterName: dataproc-1-m
  numWorkers: 5
  ...
  workers:
  - my-test-cluster-w-0
  - my-test-cluster-w-1
  - my-test-cluster-w-2
  - my-test-cluster-w-3
  - my-test-cluster-w-4
...

REST API

clusters.patch をご覧ください。

PATCH /v1/projects/project-id/regions/global/clusters/example-cluster?updateMask=config.worker_config.num_instances,config.secondary_worker_config.num_instances
{
  "config": {
    "workerConfig": {
      "numInstances": 4
    },
    "secondaryWorkerConfig": {
      "numInstances": 2
    }
  },
  "labels": null
}

Console

クラスタの作成後にクラスタをスケールするには、GCP Console の [クラスタ] ページからクラスタの [クラスタの詳細] ページを開き、[構成] タブの [編集] ボタンをクリックします。
[ワーカーノード] や [プリエンプティブ ワーカーノード] の数の新しい値を入力します(次のスクリーンショットでは、それぞれ「5」と「2」に更新しています)。
[保存] をクリックしてクラスタを更新します。

正常なデコミッション

クラスタをダウンスケールすると、進行中の作業が完了前に終了することがあります。Cloud Dataproc v 1.2 以降を使用している場合は、正常なデコミッションを使用できます。これには正常な YARN デコミッションが組み込まれており、ワーカーで進行中の作業が終了した後に、ワーカーが Cloud Dataproc クラスタから削除されます。

正常なデコミッションおよびセカンダリ ワーカー

プリエンプティブ(セカンダリ)ワーカー グループは、クラスタ スケーリングのオペレーションに完了のマークが付いた後も、想定サイズに達するまでワーカーのプロビジョニングまたは削除を続行します。セカンダリ ワーカーを正常にデコミッションしようとすると、次のようなエラー メッセージが表示される場合があります。

「セカンダリ ワーカー グループを Cloud Dataproc の外部で変更することはできません。最近このクラスタを作成または更新した場合は、正常なデコミッションによりすべてのセカンダリ インスタンスがこのクラスタに参加または離脱できるようになるまでしばらくお待ちください。想定されているセカンダリ ワーカー グループのサイズは x で、実際のサイズは y です。

この場合、数分間待ってから正常なデコミッションのリクエストを繰り返してください。

また、次の点にも注意してください。

  • プリエンプティブ ワーカーはいつでも強制的にデコミッションできます。
  • プライマリ ワーカーはいつでも正常にデコミッションできます。

正常なデコミッションの使用

Cloud Dataproc の正常なデコミッションには正常な YARN デコミッションが組み込まれていて、ワーカーを Cloud Dataproc クラスタから削除する前に、そのワーカーで進行中の作業を終了します。デフォルトでは、正常なデコミッションは無効になっています。この機能を有効にするには、クラスタから 1 つ以上のワーカーを削除するようにクラスタを更新する際に、タイムアウト値を設定します。

gcloud

1 つ以上のワーカーを削除してクラスタを更新する場合は、--graceful-decommission-timeout フラグを指定した gcloud dataproc clusters update コマンドを使用します。タイムアウト(文字列)値は、「0」(デフォルト、正常ではなく強制的なデコミッション)または現在の時刻を基準とする正の期間(たとえば「3s」)にすることができます。期間の最大値は 1 日です。
gcloud dataproc clusters update cluster-name \
    --graceful-decommission-timeout="timeout-value" \
    [--num-workers and/or --num-preemptible-workers]=decreased-number-of-workers \
    ... other args ...

REST API

clusters.patch.gracefulDecommissionTimeout をご覧ください。タイムアウト(文字列)値は、「0」(デフォルト、正常ではなく強制的なデコミッション)または秒単位の期間(たとえば「3s」)にすることができます。期間の最大値は 1 日です。

Console

クラスタの作成後にクラスタの正常なデコミッションを選択するには、GCP Console の [クラスタ] ページからクラスタの [クラスタの詳細] ページを開き、[構成] タブの [編集] ボタンをクリックします。
[正常なデコミッション] セクションで、[Use graceful decommissioning] チェックボックスをオンにし、タイムアウト値を選択します。
[保存] をクリックしてクラスタを更新します。
このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Cloud Dataproc ドキュメント
ご不明な点がありましたら、Google のサポートページをご覧ください。