フレキシブル 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 をリクエストする方法

ランク付けされた 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 で、すべてのインスタンス選択に適用されます。

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.xmlyarn.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"
  }
}

次のステップ