Dataproc クラスタは、標準的な Compute Engine VM を Dataproc ワーカー(「プライマリ」ワーカーと呼びます)として使用するだけでなく、secondary
ワーカーも使用できます。
次のルールは、Dataproc クラスタ内のすべてのセカンダリ ワーカーに適用されます。
処理のみ - セカンダリ ワーカーはデータを保存しません。これらは、処理ノードとしてのみ機能します。そのため、セカンダリ ワーカーを使用すると、ストレージをスケールすることなく、コンピューティングをスケールできます。
セカンダリ ワーカーのみのクラスタはゼロ: クラスタにはプライマリ ワーカーが必要です。クラスタを作成し、プライマリ ワーカーの数を指定しない場合、Dataproc によって 2 つのプライマリ ワーカーがクラスタに追加されます。
マシンタイプ - デフォルトでは、セカンダリ ワーカーはクラスタのプライマリ ワーカーのマシンタイプを使用します。たとえば、
n1-standard-4
マシンタイプを使用するプライマリ ワーカーでクラスタを作成した場合、デフォルトでは、クラスタに追加されたすべてのセカンダリ ワーカーもn1-standard-4
マシンを使用します。セカンダリ ワーカーにデフォルトのプライマリ ワーカー マシンタイプを使用する代わりに、セカンダリ ワーカーに 1 つ以上のマシンタイプのランク付けされたリストを指定できます。詳細については、Dataproc フレキシブル VM をご覧ください。
永続ディスクサイズ: デフォルトとして、すべてのセカンダリ ワーカーは 100GB またはプライマリ ワーカーのブートディスク サイズのいずれか小さい方で作成されます。このディスク容量は、データをローカルのキャッシュに保存するために使用され、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 など、さまざまなジョブ オプションを試して、費用の見積もりを行い、最適なソリューションを見つけてください。
非プリエンプティブル ワーカー
- 非プリエンプティブルのセカンダリ ワーカーを持つクラスタを作成すると、ジョブの安定性を損なうことなくコンピューティングをスケールできます。これを行うには、セカンダリ ワーカーのタイプとして
non-preemptible
を指定します。非プリエンプティブルとスポット セカンダリ ワーカーを組み合わせることができます。
セカンダリ ワーカーを選択する
Google Cloud Console、gcloud CLI、または Dataproc API を使用してクラスタを作成するときに、セカンダリ ワーカーの数とタイプを指定できます。
- スポットと非プリエンプティブル セカンダリ ワーカーを組み合わせることができます。
- 作成後にクラスタを更新して、クラスタ内のセカンダリ ワーカーの数を変更できますが、セカンダリ ワーカーのタイプは変更できません。
- ラベルの更新は、24 時間以内にすべてのプリエンプティブル セカンダリ ワーカーに反映されます。ラベルの更新はプリエンプティブルでない既存のセカンダリ ワーカーには反映されません。ラベルの更新は、ラベル更新の後にクラスタに追加されたすべてのワーカーに伝搬されます。たとえば、クラスタをスケールアップすると、すべての新しいプライマリ ワーカーとセカンダリ ワーカーに新しいラベルが付けられます。
Console
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 のセカンダリ ワーカーを指定できます。次の例は、各セカンダリ ワーカー タイプ(プリエンプティブル(デフォルト)、Spot(プリエンプティブル)、非プリエンプティブル)を使用してクラスタを作成する方法を示しています。追加のフラグを使用して、スポットと非プリエンプティブルのセカンダリ ワーカーを組み合わせることができます。
次のコマンドは、2 つの標準プリエンプティブル(デフォルト タイプ)セカンダリ ワーカーを持つ「cluster1」を作成します。
gcloud dataproc clusters create cluster1 \ --num-secondary-workers=2 \ --region=us-central1
次のコマンドは、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
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-workers
を 0
に設定して 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
の各セカンダリ ワーカータイプを使用してクラスタを作成する方法を示しています。追加のフィールドを使用して、スポットと非プリエンプティブル セカンダリ ワーカーを組み合わせることができます。
次の POST リクエストは、2 つの標準プリエンプティブル(デフォルト タイプ)VM ワーカーを持つ「cluster1」を作成します。
POST https://dataproc.googleapis.com/v1/projects/project-id/regions/region/clusters { "clusterName": "cluster1", "config": { "secondaryWorkerConfig": { "numInstances": 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 } } }
セカンダリ ワーカーのトラブルシューティング
サービス アカウントの権限に関する問題: セカンダリ ワーカーはマネージド インスタンス グループを介して作成されます。権限に関する問題がある場合、Dataproc ログにはセカンダリ ワーカーの作成エラーは報告されませんが、失敗したワーカーは Google Cloud コンソールの [クラスタの詳細] ページの [VM インスタンス] タブに緑色のチェックマークなしで表示されます。リスティングを表示するには、Dataproc の [クラスタ] ページを開き、クラスタ名をクリックして、クラスタの [クラスタの詳細] ページを開きます。
マネージド インスタンス グループの権限の問題: マネージド インスタンス グループの権限に問題があるかどうかを確認するには:
- マネージド インスタンス グループの名前(
instanceGroupManagerName
)を確認します。Console
- Dataproc の [クラスタ] ページを開き、クラスタ名をクリックして、クラスタの [クラスタの詳細] ページを開きます。
- ページの下部にある [同等の 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
の値を返します。 - ログ エクスプローラでログを表示します。
Google Compute Engine Instance Group
リソースタイプを選択し、マネージド インスタンス グループ名でフィルタします。または、`resource.type="gce_instance_group" と
resource.labels.instance_group_name=INSTANCE_GROUP_MANAGER_NAME
にロギング フィルタを適用することもできます。
- マネージド インスタンス グループの名前(
スポットと非プリエンプティブル セカンダリ ワーカーを組み合わせる
Dataproc クラスタを作成するときに、Spot セカンダリ ワーカーと非プリエンプティブル セカンダリ ワーカーを組み合わせて指定できます。
Spot と非プリエンプティブル セカンダリ ワーカーを混在させるセカンダリ ワーカーの設定
Dataproc クラスタを作成するときに、次のセカンダリ ワーカー設定を使用して、Spot VM が使用可能な場合に容量を増やすことができる最小レベルのセカンダリ ワーカー容量を取得します。
セカンダリ ワーカー数: プロビジョニングするセカンダリ ワーカーの合計数。
セカンダリ ワーカーのタイプ:
spot
は、Spot と非プリエンプティブル セカンダリ ワーカーを混在させる場合のセカンダリ ワーカーのタイプです。standardCapacityBase: プロビジョニングする非プリエンプティブル(標準)セカンダリ ワーカーの数。非プリエンプティブル セカンダリ ワーカーは、他のタイプのセカンダリ ワーカーの前にプロビジョニングされます。
standardCapacityPercentAboveBase:
standardCapacityBase
のセカンダリ ワーカー数が入力されると、リクエストされたセカンダリ ワーカーの合計数を満たすために必要な残りのセカンダリ ワーカー数は、次のように非プリエンプティブル VM と Spot VM が混在して入力されます。standardCapacityPercentAboveBase
: プリエンプティブでない VM で埋める残りのセカンダリ ワーカーの割合。- リクエストされたセカンダリ ワーカーの合計数を満たすために必要な残りの数は、スポット VM で埋められます。
例:
- セカンダリ ワーカーの数: 15
standardCapacityBase
: 5standardCapacityPercentAboveBase
30%
結果:
- プリエンプティブではない: 8 = 5(
standardCapacityBase
)+ 3(残りの 10 の 30%) - スポット: 7(残りの 10 個の 70%)
- 合計 = 15
Spot セカンダリ ワーカーと非プリエンプティブル セカンダリ ワーカーを組み合わせてクラスタを作成する
クラスタを作成するときに、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
注:
- CLUSTER_NAME: 新しいクラスタの名前。
- PROJECT_ID: Google Cloud プロジェクト ID。 プロジェクト ID は、Google Cloud コンソールのダッシュボードの [プロジェクト情報] セクションに表示されます。
- REGION: ワークロードを実行できる利用可能な Compute Engine リージョン。
--secondary-worker-type
: Spot セカンダリ ワーカーと非プリエンプティブル セカンダリ ワーカーを混在させる場合は、セカンダリ ワーカーのタイプをspot
として指定します。- STANDARD_CAPACITY_BASE と STANDARD_CAPACITY_PERCENT_ABOVE_BASE: Spot と非プリエンプティブル セカンダリ ワーカーを混在させるセカンダリ ワーカーの設定をご覧ください。
- OTHER_FLAGS_AS_NEEDED: gcloud dataproc clusters create をご覧ください。
API
スポットとプリエンプティブル以外のセカンダリ ワーカーを混在させるには、次の JSON サンプルに示すように、cluster.create リクエストの一部として Dataproc の preemptibility
、standardCapacityBase
、standardCapacityPercentAboveBase
API フィールドを設定します。
{ "clusterName": "CLUSTER_NAME", "config": { "secondaryWorkerConfig": { "numInstances": 15, "preemptibility": "spot", "instanceFlexibilityPolicy": { "provisioningModelMix": { "standardCapacityBase": STANDARD_CAPACITY_BASE "standardCapacityPercentAboveBase": STANDARD_CAPACITY_PERCENT_ABOVE_BASE } } } } }
注:
- CLUSTER_NAME: 新しいクラスタの名前。
preemptibility
: Spot セカンダリ ワーカーと非プリエンプティブル セカンダリ ワーカーを混在させる場合は、spot
を指定します。- STANDARD_CAPACITY_BASE と STANDARD_CAPACITY_PERCENT_ABOVE_BASE: Spot と非プリエンプティブル セカンダリ ワーカーを混在させるセカンダリ ワーカーの設定をご覧ください。
セカンダリ ワーカーの混在とフレキシブル VM を組み合わせる
クラスタの作成時に、Spot セカンダリ ワーカーと非プリエンプティブル セカンダリ ワーカーを組み合わせて、セカンダリ ワーカーのフレキシブル VM シェイプを指定できます。
gcloud CLI の例:
gcloud dataproc clusters create cluster-name \ --project=project-id \ --region=us-cdbtral1 \ --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 は、セカンダリ ワーカーでアプリケーションをスケジューリングするときに、Spot VM と非プリエンプティブル VM のどちらも優先しません。
セカンダリ ワーカーのスケーリング
セカンダリ ワーカーが自動スケーリングまたは手動スケーリングでスケーリングされる場合、Dataproc はセカンダリ ワーカーの追加または削除時にリクエストされたスポットと非プリエンプティブルの比率を維持します。
セカンダリ ワーカーの混合設定の更新
Spot セカンダリ ワーカーと非プリエンプティブル セカンダリ ワーカーの組み合わせは、Dataproc クラスタを作成するときに指定します。クラスタの作成後にセカンダリ ワーカーの構成を変更することはできません。
Spot セカンダリ ワーカーのプリエンプション
- Dataproc は、Spot VM のプリエンプションのタイミングを制御しません(Spot VM のプリエンプションをご覧ください)。
- Spot プリエンプションが発生すると、Compute Engine がプリエンプトされた VM を再プロビジョニングするまで、セカンダリ ワーカー グループは容量が減らされて一時的に実行されます。
- Dataproc は、グループの初期設定を超える容量をセカンダリ ワーカー グループに追加しません。