クラスタのスケーリング

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

Dataproc クラスタをスケーリングする理由

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

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

スケーリングの使用

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

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

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

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

gcloud

gcloud dataproc clusters update でクラスタをスケールするには、次のコマンドを実行します。
gcloud dataproc clusters update cluster-name \
    --region=region \
    [--num-workers and/or --num-secondary-workers]=new-number-of-workers
ここで、cluster-name は更新するクラスタの名前で、new-number-of-workers は更新後のプライマリ ワーカーノードやセカンダリ ワーカーノードの数です。たとえば、5 つのプライマリ ワーカーノードを使用するように「dataproc-1」という名前のクラスタをスケールするには、次のコマンドを実行します。
gcloud dataproc clusters update dataproc-1 \
    --region=region \
    --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/us-central1/clusters/example-cluster?updateMask=config.worker_config.num_instances,config.secondary_worker_config.num_instances
{
  "config": {
    "workerConfig": {
      "numInstances": 4
    },
    "secondaryWorkerConfig": {
      "numInstances": 2
    }
  },
  "labels": null
}

コンソール

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

正常なデコミッション

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

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

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

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

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

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

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

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

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

gcloud

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

REST API

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

コンソール

クラスタの作成後にクラスタの正常なデコミッションを選択するには、Cloud Console の [クラスタ] ページからクラスタの [クラスタの詳細] ページを開き、[構成] タブの [編集] ボタンをクリックします。
[正常なデコミッション] セクションで、「正常なでコミッションの使用」チェックボックスをオンにし、タイムアウト値を選択します。
[保存] をクリックしてクラスタを更新します。