フレキシブル VM は、Managed Service for Apache Spark クラスタを作成するときに、Managed Service for Apache Spark マスターノード、プライマリ ワーカーノード、セカンダリ ワーカーノードのVM タイプの優先リストを指定できる Managed Service for Apache Spark の機能です。
フレキシブル VM を使用する理由
問題: クラスタ作成リクエストの送信時に VM タイプを使用できなかった場合、リクエストは失敗し、リクエスト、スクリプト、コードを更新して「次善の」VM タイプを指定する必要があります。この再リクエスト プロセスでは、使用可能な VM タイプを指定するまで、複数の反復処理が必要になることがあります。
解決策: Managed Service for Apache Spark フレキシブル VM 機能は、ランク付けされた VM リストからマスター、プライマリ、セカンダリ ワーカー VM タイプを選択し、リストされた VM タイプが利用可能な指定されたクラスタ リージョン内のゾーンを検索することで、クラスタ作成リクエストを成功させるのに役立ちます。
制限事項
- フレキシブル VM を使用するクラスタは 停止できません。
- 高可用性クラスタのマスターノードではフレキシブル VM を使用できませんが、HA クラスタのワーカーノードではフレキシブル VM を使用できます。
用語
- VM タイプ: VM インスタンスのファミリー、メモリ容量、CPU コア数。Managed Service for Apache Spark は、 事前定義された VM タイプとカスタム VM タイプの使用をサポートしています。
- マスターノードとプライマリ ワーカーノード: デフォルトでは、Managed Service for Apache Spark クラスタには 1 つのマスターノードと 2 つのプライマリ ワーカーノードがあります。
- 高可用性(HA)クラスタには 3 つのマスターノードがあります。
- 単一ノードクラスタ には、マスターノードとワーカーノードの両方として機能するノードが 1 つあります。
- ゼロスケール クラスタには、マスターノードとセカンダリ ワーカーのみがあります(プライマリ ワーカーはありません)。
- セカンダリ ワーカーノード: セカンダリ ワーカー はデータを保存せず、処理ノードとしてのみ機能します。 セカンダリ ワーカーを使用すると、ストレージをスケーリングせずにコンピューティングをスケーリングできます。デフォルトのフレキシブル VM セカンダリ ワーカー タイプは Spot VM であり、プリエンプティブル タイプです。
用途
- フレキシブル VM は、Managed Service for Apache Spark の
Managed Service for Apache Spark
2.0.74+、2.1.76+、2.2.42+以降のイメージ バージョンで使用できます。 - ランク付けされた VM タイプのリストを最大 5 つ指定できます。リスト内の VM タイプは最大 10 個です。
ワークフロー テンプレートにフレキシブル VM を含めることで、テンプレートからクラスタが作成されたときにリソースが使用できなくなるのを防ぐことができます。
推奨事項: Managed Service for Apache Spark の自動ゾーン プレースメントを有効にします。 これにより、Managed Service for Apache Spark は、リクエストされた VM をプロビジョニングできる容量を持つゾーンを選択できます。
デフォルトでは、クラスタノードは 1 つのディスクタイプを使用する必要があります。ディスクのオーバーライドを使用すると、Flex VM クラスタノードに指定されたマシンタイプごとに異なるディスクタイプを指定できます。
クラスタ内のプライマリ ワーカーとセカンダリ ワーカーの VM タイプに異なる CPU とメモリの比率を指定できますが、最小の CPU とメモリの比率が最小のコンテナ単位として使用されるため、パフォーマンスが低下する可能性があります。
クラスタ作成リクエストに 自動スケーリング ポリシーが含まれている場合、 フレキシブル VM は異なる VM ファミリーから利用できますが、 メモリとコアの数は同じである必要があります。
フレキシブル VM をプロビジョニングする場合、Managed Service for Apache Spark は "一致するすべての" 利用可能な予約を消費しますが、"特定の" 予約は消費しません(予約済みインスタンスの消費をご覧ください)。予約に一致するマシンタイプがランク内で最初に選択され、次に CPU 数が最も多い VM タイプが選択されます。
Managed Service for Apache Spark はフレキシブル VM プロビジョニングに Google Cloud 割り当て を適用します。
フレキシブル VM を使用して作成されたクラスタを更新すると、Managed Service for Apache Spark は、クラスタの作成時に指定したフレキシブル VM リストからワーカーを選択して追加します。
フレキシブル VM をリクエストする方法
ランク付けされた VM タイプのリストを最大 5 つ指定できます。リスト内の VM タイプは最大 10 個です。優先度が最も高いのは、ランクが最も低いリストです。デフォルトでは、フレキシブル VM リストのランクは 0 です。Managed Service for Apache Spark はリスト内で、未使用の予約を持つ VM タイプを優先し、次に最大の VM サイズを優先します。同じ CPU 数を持つリスト内の VM タイプは、同じ扱いになります。
コンソール、Google Cloud CLI、または Dataproc API を使用して Managed Service for Apache Spark クラスタを作成するときに、フレキシブル VM をリクエストできます。 Google Cloud
コンソール
フレキシブル VM を含むクラスタを作成する手順は次のとおりです。
- [**クラスタを作成**] ページを開きます。
- [追加構成] をクリックしてセクションを開きます。
- [プライマリ ワーカー] または [セカンダリ ワーカー] を編集します。 [ワーカータイプの追加] で、ランク付けされた VM を追加で指定します。
gcloud
gcloud dataproc clusters create
コマンドで master-instance-selection、worker-instance-selection、
secondary-worker-instance-selection
フラグを使用して、マスター、プライマリ、
セカンダリ ワーカーのランク付けされたフレキシブル VM リストを指定します。
次の例では、次の優先度でマスター、プライマリ、セカンダリの VM タイプをリクエストします。
- 利用可能な場合は
e2-standard-8VM をプロビジョニングします(ランク 0)。e2-standard-8マシンが利用できない場合は、n2-standard-8VM をプロビジョニングします(ランク 1)。
セカンダリ ワーカー タイプが指定されていないため、プリエンプティブル Spot セカンダリ VM がプロビジョニングされます。
gcloud dataproc clusters create CLUSTER_NAME \
--region=REGION \
--zone="" \
--master-instance-selection='{"machineTypes":["e2-standard-8"],"rank":0}' \
--master-instance-selection='{"machineTypes":["n2-standard-8"],"rank":1}' \
--num-workers=10 \
--worker-instance-selection='{"machineTypes":["e2-standard-8"],"rank":0}' \
--worker-instance-selection='{"machineTypes":["n2-standard-8"],"rank":1}' \
--num-secondary-workers=4 \
--secondary-worker-instance-selection='{"machineTypes":["e2-standard-8"],"rank":0}' \
--secondary-worker-instance-selection='{"machineTypes":["n2-standard-8"],"rank":1}'
注:
--zone="": このフラグを空の値に設定すると、 自動ゾーン プレースメントが有効になり、 Managed Service for Apache Spark は、 リクエストされた VM タイプを使用できるゾーンを選択できます。このフラグの値は、デフォルトのgcloud config listで指定されたゾーン選択をオーバーライドします。
API
instanceFlexibilityPolicy.instanceSelectionList
を Dataproc API
clusters.create
リクエストの一部として使用して、マスター、プライマリ、セカンダリ ワーカーの
machineTypes
のランク付けされたリストを指定します。
例: 次の JSON スニペットは、ランク 0 とランク 1 のマスター(masterConfig)、プライマリ ワーカー(workerConfig)、セカンダリ ワーカー(secondaryWorkerConfig)のマシンタイプを指定します。clusters.create
{
"projectId": "PROJECT_ID",
"clusterName": "CLUSTER_NAME",
"config": {
"gceClusterConfig": {
"zoneUri": ""
},
"masterConfig": {
"numInstances": 1,
"instanceFlexibilityPolicy": {
"instanceSelectionList": [
{
"machineTypes": ["e2-standard-8"],
"rank": 0
},
{
"machineTypes": ["n2-standard-8"],
"rank": 1
}
]
}
},
"workerConfig": {
"numInstances": 10,
"instanceFlexibilityPolicy": {
"instanceSelectionList": [
{
"machineTypes": ["e2-standard-8"],
"rank": 0
},
{
"machineTypes": ["n2-standard-8"],
"rank": 1
}
]
}
},
"secondaryWorkerConfig": {
"numInstances": 4,
"instanceFlexibilityPolicy": {
"instanceSelectionList": [
{
"machineTypes": ["e2-standard-8"],
"rank": 0
},
{
"machineTypes": ["n2-standard-8"],
"rank": 1
}
]
}
}
}
}
ディスクのオーバーライド
フレキシブル VM 仕様の各マシンタイプ(インスタンス選択)にディスクのオーバーライドを指定できます。これにより、ブートディスクをカスタマイズし、ローカル SSD をオーバーライドして、特定のマシンタイプに追加のディスクを接続できます。
ディスクのオーバーライド オプションとルール
ディスクのオーバーライド構成オプション:
- ベースディスク構成: クラスタノードに指定されたディスク構成。
たとえば、gcloud CLI
--worker-boot-disk-sizeフラグまたはworkerConfig.diskConfig.bootDiskSizeGbDataproc API フィールドを使用して、プライマリ ワーカーのブートディスク サイズを指定します。 - インスタンス選択ディスクのオーバーライド: クラスタノードに指定されたマシンタイプのディスク構成。
ディスクのオーバーライド構成ルール:
ベースディスク構成: クラスタノードのインスタンス選択に
diskConfigのオーバーライドが含まれていない場合は、ノードのベースディスク構成を定義できます。このベースディスク構成は、ノードのすべてのインスタンス選択に適用されます。インスタンス選択ディスク構成: クラスタノードのインスタンス選択に
diskConfigのオーバーライドが含まれている場合、ノードグループ内のすべての インスタンス選択にdiskConfigを含める必要があります(ノードのベースディスク構成も定義すると、検証エラーが発生します)。マシンタイプの互換性: 単一の
InstanceSelection内のすべてのマシンタイプは、指定されたdiskConfigと互換性がある必要があります。たとえば、ハイパーディスクをサポートしていないe2-standard-4マシンタイプと、ハイパーディスクを必要とするn4-standard-4マシンタイプを同じインスタンス選択でグループ化することはできません。これは、diskConfigが両方のマシンタイプを満たすことができないためです。ローカル SSD のサポート: ディスクのオーバーライド構成でローカル SSD(
numLocalSsds> 0)を構成する場合、インスタンス選択のすべての マシンタイプでローカル SSD がサポートされている必要があります。必須のディスクのオーバーライド構成フィールド:
- インスタンス選択に
diskConfigを定義する場合、bootDiskTypeは必須です。 attachedDiskConfigsを定義する場合は、接続されているディスクごとにdiskTypeとdiskSizeGbの両方が必須です。
- インスタンス選択に
ディスクのオーバーライド構成の例
次の例では、次のクラスタノードに次のディスクのオーバーライド構成オプションを指定します。
- マスターノード: デフォルトのブートディスクを使用します。
- プライマリ ワーカー: インスタンス選択ごとにカスタマイズされたディスクを使用します。たとえば、
n4-standard-4はhyperdisk-balancedを使用し、n2-standard-4はpd-standardを使用します。 - セカンダリ ワーカー: カスタムのベースディスク構成を使用します。
pd-ssdは200 GBで、すべてのインスタンス選択に適用されます。
Dataproc API
Dataproc API clusters.create リクエストの instanceFlexibilityPolicy.instanceSelectionList 内の diskConfig フィールドを使用します。
JSON リクエスト本文の例:
{
"projectId": "PROJECT_ID",
"clusterName": "CLUSTER_NAME",
"config": {
"gceClusterConfig": {
"zoneUri": ""
},
"masterConfig": {
"numInstances": 1,
"instanceFlexibilityPolicy": {
"instanceSelectionList": [
{
"machineTypes": ["e2-standard-8"],
"rank": 0
},
{
"machineTypes": ["n2-standard-8"],
"rank": 1
}
]
}
},
"workerConfig": {
"numInstances": 10,
"instanceFlexibilityPolicy": {
"instanceSelectionList": [
{
"machineTypes": ["n4-standard-4"],
"rank": 0,
"diskConfig": {
"bootDiskType": "hyperdisk-balanced",
"bootDiskSizeGb": 100,
"bootDiskProvisionedIops": 6000,
"bootDiskProvisionedThroughput": 400,
"attachedDiskConfigs": [
{
"diskType": "HYPERDISK_THROUGHPUT",
"diskSizeGb": 2048
}
]
}
},
{
"machineTypes": ["n2-standard-4"],
"rank": 0,
"diskConfig": {
"bootDiskType": "pd-standard",
"bootDiskSizeGb": 400
}
}
]
}
},
"secondaryWorkerConfig": {
"numInstances": 4,
"diskConfig": {
"bootDiskType": "pd-ssd",
"bootDiskSizeGb": 200
},
"instanceFlexibilityPolicy": {
"instanceSelectionList": [
{
"machineTypes": ["e2-standard-8"],
"rank": 0
},
{
"machineTypes": ["n2-standard-8"],
"rank": 1
}
]
}
}
}
}
Flex VM のプロパティをオーバーライドする
Managed Service for Apache Spark は、クラスタレベルでプロパティを設定します。フレキシブル VM を使用するクラスタを作成するときに、プライマリ ワーカーとセカンダリ ワーカーの Flex VM タイプに対してシステム生成プロパティをオーバーライドできます。
gcloud
クラスタの作成時にプロパティをオーバーライドするには、次の構文で --properties フラグを使用します。
--properties="$ROLE:$MACHINE_TYPE:$COMPONENT_PREFIX:$COMPONENT_PROPERTY=$VALUE"
- ROLE は、
primary_workerまたはsecondary_workerのいずれかになります。 - 複数のプロパティはカンマで区切ります。
次の gcloud dataproc clusters create コマンドは、セカンダリ ワーカーの NodeManager に YARN が割り当てる vCPU の数をオーバーライドします。
この例では、すべての e2-standard-8 および n2-standard-8 セカンダリ ワーカー VM の yarn-site.xml の yarn.nodemanager.resource.cpu-vcores 値を 6 に設定します。
gcloud dataproc clusters create CLUSTER_NAME \
--num-workers=10 \
--num-secondary-workers=4 \
--worker-machine-types="type=e2-standard-8,rank=0" \
--worker-machine-types="type=n2-standard-8,rank=1" \
--master-machine-types="type=e2-standard-8,rank=0" \
--master-machine-types="type=n2-standard-8,rank=1" \
--secondary-worker-machine-types="type=e2-standard-8,rank=0" \
--secondary-worker-machine-types="type=n2-standard-8,rank=1" \
--region=us-central1 \
--zone="" \
--properties="secondary_worker:e2-standard-8:yarn:yarn.nodemanager.resource.cpu-vcores=6,secondary_worker:n2-standard-8:yarn:yarn.nodemanager.resource.cpu-vcores=6"
API
プロパティをオーバーライドするには、クラスタ作成リクエストの
SoftwareConfig
オブジェクトの properties フィールドで定義します。
プロパティ キーには次の構文を使用します。
ROLE:MACHINE_TYPE:COMPONENT_PREFIX:COMPONENT_PROPERTY
- ROLE は、
primary_workerまたはsecondary_workerのいずれかになります。
次の SoftwareConfig オブジェクトは、セカンダリ ワーカーの NodeManager に YARN が割り当てる vCPU の数をオーバーライドします。この例では、すべての e2-standard-8 および n2-standard-8 セカンダリ ワーカー VM の yarn.nodemanager.resource.cpu-vcores 値を 6 に設定します。
{
"imageVersion":"2.2.42",
"properties": {
"secondary_worker:e2-standard-8:yarn:yarn.nodemanager.resource.cpu-vcores" : "6",
"secondary_worker:n2-standard-8:yarn:yarn.nodemanager.resource.cpu-vcores" : "6"
}
}
次のステップ
- Managed Service for Apache Spark クラスタ プロパティの詳細を確認する。
- Managed Service for Apache Spark クラスタ を作成する方法を確認する。