フレキシブル 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 インスタンスのファミリー、メモリ容量、CPU コア数。Managed Service for Apache Spark は、 事前定義された VM タイプとカスタム VM タイプの使用をサポートしています。
  • マスターノードとプライマリ ワーカーノード: クラスタにはマスターノードと少なくとも 2 つのプライマリ ワーカーがあります。
  • セカンダリ ワーカー: セカンダリ ワーカー は省略可能で、データを保存しません。処理ノードとしてのみ機能します。 そのため、セカンダリ ワーカーを使用すると、ストレージをスケールすることなく、コンピューティングをスケールできます。デフォルトのフレキシブル VM セカンダリ ワーカー タイプは Spot VM であり、 プリエンプティブル タイプです(Managed Service for Apache Spark セカンダリ ワーカーをご覧ください)。

用途

  • フレキシブル VM は、Compute Engine 上の Managed Service for Apache Spark 2.0.74+2.1.76+2.2.42+ 以降のイメージ バージョンで使用できます。
  • マスターまたはプライマリ ワーカーの Flex VM を使用したクラスタの作成には時間がかかります(約 32 秒追加)。
  • クラスタ名は 45 文字以下にする必要があります。
  • すべての VM タイプで同じディスクタイプが必要です。
  • ランク付けされた VM タイプのリストを最大 5 つ指定できます。リスト内の VM タイプは最大 10 個です。詳細については、フレキシブル VMをリクエストする方法をご覧ください。
  • クラスタ作成リクエストに自動スケーリング ポリシーが含まれている場合、 フレキシブル VM は異なる VM ファミリーから利用できますが、メモリとコアの数は同じである必要があります。
  • フレキシブル VM をプロビジョニングする場合、Managed Service for Apache Spark は "一致するすべての" 利用可能な予約を消費しますが、"特定の" 予約は消費しません(予約済みインスタンスの消費をご覧ください)。予約に一致するマシンタイプがランク内で最初に選択され、次に CPU 数が最も多い VM タイプが選択されます。
  • Managed Service for Apache Spark は Google Cloud 割り当て をフレキシブル VM プロビジョニングに適用します。
  • クラスタ内のプライマリ ワーカーとセカンダリ ワーカーの VM タイプに異なる CPU とメモリの比率を指定できますが、最小の CPU とメモリの比率が最小のコンテナ単位として使用されるため、パフォーマンスが低下する可能性があります。
  • フレキシブル VM を使用して作成されたクラスタを更新すると、クラスタの作成時に指定したフレキシブル VM リストからワーカーが選択され、追加されます。

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

フレキシブル VM をリクエストする方法

コンソール、Google Cloud CLI、または Dataproc API を使用して Managed Service for Apache Spark クラスタを作成するときに、フレキシブル VM を指定できます。 Google Cloud

  • ランク付けされた VM タイプのリストを最大 5 つ指定できます。リスト内の VM タイプは最大 10 個です。優先度が最も高いのは、ランクが最も低いリストです。デフォルトでは、フレキシブル VM リストのランクは 0 です。Managed Service for Apache Spark はリスト内で、未使用の予約を持つ VM タイプを優先し、次に最大の VM サイズを優先します。同じ CPU 数を持つリスト内の VM タイプは、同じ扱いになります。

コンソール

フレキシブル VM を含むクラスタを作成する手順は次のとおりです。

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

gcloud

gcloud dataproc clusters create コマンドを使用して、複数の master-machine-typesworker-machine-typessecondary-worker-machine-types フラグを追加し、マスター、プライマリ、 セカンダリ ワーカーのランク付けされたフレキシブル 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-machine-types="type=e2-standard-8,rank=0" \
    --master-machine-types="type=n2-standard-8,rank=1" \
    --num-workers=10 \
    --worker-machine-types="type=e2-standard-8,rank=0" \
    --worker-machine-types="type=n2-standard-8,rank=1" \
    --num-secondary-workers=4 \
    --secondary-worker-machine-types="type=e2-standard-8,rank=0" \
    --secondary-worker-machine-types="type=n2-standard-8,rank=1"

注:

  • --zone="": このフラグを空の値に設定すると、 自動ゾーン配置が有効になります。 これにより、リクエストされた VM タイプが使用可能なゾーンを Managed Service for Apache Spark が選択できます。このフラグ値は、デフォルトの 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
          }
        ]
      }
    }
  }
}

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

次のステップ