フレキシブル VM で VM タイプの優先順位を付ける

フレキシブル 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 は、Managed Service for Apache Spark の Managed Service for Apache Spark 2.0.74+2.1.76+2.2.42+ 以降の イメージ バージョンで使用できます。 * イメージ バージョン 3.0 以降では、クラスタノードのマシンタイプを指定せずに クラスタを作成すると、Managed Service for Apache Spark は、リソースの可用性を最適化したリストを使用して、N4、N2、E2 シリーズのマシンタイプのランク付けされたリストなど、フレキシブル VM マシンタイプのランク付けされたリストでノードを指定します。
  • ランク付けされた VM タイプのリストを最大 5 つ指定できます。リスト内の VM タイプは最大 10 個です。
  • ワークフロー テンプレートにフレキシブル VM を含めることで、テンプレートからクラスタが作成されたときにリソースが使用できなくなるのを防ぐことができます。

    推奨事項: Managed Service for Apache Spark の自動ゾーン プレースメントを有効にします。 これにより、Managed Service for Apache Spark は、リクエストされた VM をプロビジョニングできる容量を持つゾーンを選択できます。

  • デフォルトでは、クラスタノードは 1 つのディスクタイプを使用する必要があります。ディスクのオーバーライドを使用すると、Flex VM クラスタノードに指定されたマシンタイプごとに異なるディスクタイプを指定できます。

  • クラスタ内のプライマリ ワーカーとセカンダリ ワーカーの VM タイプに異なる CPU とメモリの比率を指定できますが、最小の CPU とメモリの比率が最小のコンテナ単位として使用されるため、パフォーマンスが低下する可能性があります。

  • クラスタ作成リクエストに 自動スケーリング ポリシーが含まれている場合、 フレキシブル VM は異なる VM ファミリーから利用できますが、 メモリとコアの数は同じである必要があります。

  • 予約に一致するマシンタイプがランク内で最初に選択され、次に 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 を含むクラスタを作成する手順は次のとおりです。

  1. [**クラスタを作成**] ページを開きます。
  2. [追加構成] をクリックしてセクションを開きます。
  3. [プライマリ ワーカー] または [セカンダリ ワーカー] を編集します。 [ワーカータイプの追加] で、ランク付けされた VM を追加で指定します。

gcloud

gcloud dataproc clusters create コマンドを master-instance-selectionworker-instance-selectionsecondary-worker-instance-selection フラグとともに使用して、マスター、プライマリ、 セカンダリ ワーカーのランク付けされたフレキシブル VM リストを指定します。

次の例では、次の優先度でマスター、プライマリ、セカンダリの VM タイプをリクエストします。

  • 利用可能な場合は e2-standard-8 VM をプロビジョニングします(ランク 0)。e2-standard-8 マシンが利用できない場合は、n2-standard-8 VM をプロビジョニングします(ランク 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.bootDiskSizeGb Dataproc API フィールドを使用して、プライマリ ワーカーのブートディスク サイズを指定します。
  • インスタンス選択ディスクのオーバーライド: クラスタノードに指定されたマシンタイプのディスク構成。

ディスクのオーバーライド構成ルール:

  • ベースディスク構成: クラスタノードのインスタンス選択に diskConfig のオーバーライドが含まれていない場合は、ノードのベースディスク構成を定義できます。このベースディスク構成は、ノードのすべてのインスタンス選択に適用されます。

  • インスタンス選択ディスク構成: クラスタノードのインスタンス選択に diskConfig のオーバーライドが含まれている場合、ノードグループ内のすべての インスタンス選択に diskConfig を含める必要があります(ノードのベースディスク構成も定義すると、検証エラーが発生します)。

  • マシンタイプの互換性: 単一の InstanceSelection 内のすべてのマシンタイプは、指定された diskConfig と互換性がある必要があります。たとえば、ハイパーディスクをサポートしていない e2-standard-4 マシンタイプと、ハイパーディスクを必要とする n4-standard-4 マシンタイプを同じインスタンス選択でグループ化することはできません。これは、diskConfig が両方のマシンタイプを満たすことができないためです。

  • ローカル SSD のサポート: ディスクのオーバーライド構成でローカル SSD(numLocalSsds > 0)を構成する場合、インスタンス選択のすべての マシンタイプでローカル SSD がサポートされている必要があります。

  • 必須のディスクのオーバーライド構成フィールド:

    • インスタンス選択に diskConfig を定義する場合、bootDiskType は必須です。
    • attachedDiskConfigs を定義する場合は、接続されたディスクごとに diskTypediskSizeGb の両方が必須です。

ディスクのオーバーライド構成の例

次の例では、次のクラスタノードに次のディスクのオーバーライド構成オプションを指定します。

  • マスターノード: デフォルトのブートディスクを使用します。
  • プライマリ ワーカー: インスタンス選択ごとにカスタマイズされたディスクを使用します。たとえば、n4-standard-4hyperdisk-balanced を使用し、n2-standard-4pd-standard を使用します。
  • セカンダリ ワーカー: カスタムのベースディスク構成を使用します。pd-ssd200 GB で、すべてのインスタンス選択に適用されます。

gcloud YAML

マスターノード、プライマリ ワーカーノード、セカンダリ ワーカーノードの YAML ファイルでフレキシブル VM ポリシーを定義します。

  1. master-flex-policy.yaml:
    instanceFlexibilityPolicy:
      instanceSelectionList:
      - machineTypes:
        - e2-standard-8
        rank: 0
      - machineTypes:
        - n2-standard-8
        rank: 1
  2. worker-flex-policy.yaml:
    instanceFlexibilityPolicy:
      instanceSelectionList:
      - machineTypes:
        - n4-standard-4
        rank: 0
        diskConfig:
          bootDiskType: hyperdisk-balanced
          bootDiskSizeGb: 100
          bootDiskProvisionedIops: 6000
          bootDiskProvisionedThroughput: 400
          attachedDiskConfigs:
          - diskType: hyperdisk-throughput
            diskSizeGb: 300
      - machineTypes:
        - n2-standard-4
        rank: 0
        diskConfig:
          bootDiskType: pd-standard
          bootDiskSizeGb: 400
  3. secondary-worker-flex-policy.yaml:
    instanceFlexibilityPolicy:
      instanceSelectionList:
      - machineTypes:
        - e2-standard-8
        rank: 0
      - machineTypes:
        - n2-standard-8
        rank: 1

gcloud dataproc clusters create コマンドを使用して、ポリシーファイルを渡します。

gcloud dataproc clusters create CLUSTER_NAME \
    --region=REGION \
    --zone="" \
    --num-masters=1 \
    --master-instance-flexibility-policy-file=master-flex-policy.yaml \
    --num-workers=10 \
    --worker-instance-flexibility-policy-file=worker-flex-policy.yaml \
    --num-secondary-workers=4 \
    --secondary-worker-boot-disk-type=pd-ssd \
    --secondary-worker-boot-disk-size=200 \
    --secondary-worker-instance-flexibility-policy-file=secondary-worker-flex-policy.yaml

gcloud JSON

gcloud dataproc clusters create コマンドをインライン JSON diskConfig 仕様と合わせて --worker-instance-selection で使用します。

gcloud dataproc clusters create CLUSTER_NAME \
    --region=REGION \
    --zone="" \
    --num-masters=1 \
    --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":["n4-standard-4"],"rank":0,"diskConfig":{"bootDiskType":"hyperdisk-balanced","bootDiskSizeGb":100,"bootDiskProvisionedIops":6000,"bootDiskProvisionedThroughput":400,"attachedDiskConfigs":[{"diskType":"hyperdisk-throughput","diskSizeGb":300}]}}' \
    --worker-instance-selection='{"machineTypes":["n2-standard-4"],"rank":0,"diskConfig":{"bootDiskType":"pd-standard","bootDiskSizeGb":400}}' \
    --num-secondary-workers=4 \
    --secondary-worker-boot-disk-type=pd-ssd \
    --secondary-worker-boot-disk-size=200 \
    --secondary-worker-instance-selection='{"machineTypes":["e2-standard-8"],"rank":0}' \
    --secondary-worker-instance-selection='{"machineTypes":["n2-standard-8"],"rank":1}'

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.xmlyarn.nodemanager.resource.cpu-vcores 値を 6 に設定します。

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}' \
    --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"
  }
}

次のステップ