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

Dataproc クラスタを作成すると、クラスタ内のプライマリ ワーカーノードまたはセカンダリ ワーカーノードの数を増減して(水平スケーリング)、クラスタを調整(「スケール」)できます。ジョブがクラスタで実行されている場合も含め、いつでも Dataproc クラスタをスケールできます。既存のクラスタのマシンタイプは変更できません(垂直スケーリング)。垂直方向にスケーリングするには、サポートされているマシンタイプを使用してクラスタを作成してから、ジョブを新しいクラスタに移行します。

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

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

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

スケーリングの使用

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

  1. gcloud CLI で 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
}

Console

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

Dataproc が削除するクラスタノードを選択する方法

クラスタのスケールダウン時にイメージ バージョン 1.5.83+2.0.57+2.1.5+ で作成されたクラスタで、Dataproc は、非アクティブで、異常なアイドル状態のノードを削除してから、実行している YARN アプリケーション マスターと実行しているコンテナが最も少ないノードを削除して、実行している YARN アプリケーションでのノードの削除の影響を最小限に抑えようとします。

正常なデコミッション

クラスタをダウンスケールすると、進行中の作業が完了前に停止することがあります。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 日です。

Console

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

正常なデコミッションのスケールダウン オペレーションをキャンセルする方法

イメージ バージョン 2.0.57+または 2.1.5+で作成された Dataproc クラスタの場合、gcloud dataproc operations cancel コマンドを実行するか、Dataproc API operations.cancel リクエストを発行して、正常なデコミッションのスケールダウン オペレーションをキャンセルすることができます。

正常なデコミッションのスケールダウン オペレーションをキャンセルすると、次のようになります。

  • DECOMMISSIONING 状態のワーカーが再コミッションされ、オペレーションのキャンセルが完了すると ACTIVE になります。

  • スケールダウン オペレーションにラベルの更新が含まれている場合、更新が反映されないことがあります。

キャンセル リクエストのステータスを確認するには、gcloud dataproc operations describe コマンドを実行するか、Dataproc API operations.get リクエストを発行します。キャンセル オペレーションが成功すると、内部オペレーションのステータスは CANCELLED になります。