Dataproc フレキシブル VM

フレキシブル VM は、Dataproc クラスタを作成する時に Dataproc セカンダリ ワーカーVM タイプの優先リストを指定できる Dataproc の機能です。

フレキシブル VM を使用する理由

以前は、クラスタ作成リクエストを送信したときに VM タイプを使用できなかった場合、そのリクエストは失敗し、「次へ」の VM タイプを指定するためにリクエスト、スクリプト、またはコードを更新する必要がありました。この再リクエスト プロセスでは、使用可能な VM タイプを指定するまで、複数回のイテレーションを伴う場合があります。

Dataproc フレキシブル VM 機能は、ランク付けされた VM リストからセカンダリ ワーカー VM タイプを選択し、リストされた VM タイプが利用可能な指定されたクラスタ リージョン内のゾーンを検索することで、クラスタ作成リクエストを成功させるのに役立ちます。

用語

  • VM タイプ: VM インスタンスのファミリー、メモリ容量、CPU コア数。Dataproc では、事前定義された VM タイプとカスタム VM タイプの使用がサポートされています。

  • セカンダリ ワーカー: セカンダリ ワーカーはデータを保存しません。これらは、処理ノードとしてのみ機能します。そのため、セカンダリ ワーカーを使用すると、ストレージをスケールすることなく、コンピューティングをスケールできます。

制限事項と考慮事項

  • フレキシブル VM は、Dataproc on Compute Engine の 2.0.74+2.1.22+ 以降の Dataproc on Compute Engine のイメージ バージョンで使用できます。

  • プレビュー リリース中:

    • セカンダリ ワーカーにのみフレキシブル VM を指定できます。
    • クラスタ作成リクエストでは、Spot と非プリエンプティブル セカンダリ ワーカー タイプのいずれかをフレキシブル VM として指定できますが、両方を指定することはできません。セカンダリ ワーカー タイプを指定しない場合、Dataproc はプリエンプティブルである Spot VM を使用します。
  • 最大 5 つのランク付けされた VM タイプのリストを指定できます。リストには最大 10 個の VM タイプを指定できます。詳細については、フレキシブル VM をリクエストする方法をご覧ください。

  • フレキシブル VM でクラスタを作成するには、Dataproc 自動ゾーン プレースメントを使用する必要があります。これにより、Dataproc は VM タイプ リクエストを満たす容量を持つゾーンを選択できます。

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

  • フレキシブル VM をプロビジョニングする場合、Dataproc は「一致するすべての」利用可能な予約を消費しますが、「特定の」予約は消費しません(予約済みインスタンスの消費をご覧ください)。予約に一致するマシンタイプが最初にランク内で選択され、次に CPU 数が最も多い VM タイプが続きます。

  • Dataproc は Google Cloud の割り当てをフレキシブル VM プロビジョニングに適用します。

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

  • フレキシブル VM を使用して作成されたクラスタを更新すると、Dataproc はクラスタの作成時に指定したフレキシブル VM リストからワーカーを選択して追加します。

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

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

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

コンソール

セカンダリ ワーカーのフレキシブル VM を使用してクラスタを作成するには:

  1. Google Cloud コンソールで、Dataproc の [Compute Engine でクラスタを作成する] ページを開きます。

  2. デフォルト値がフィールドに入力されている [クラスタの設定] パネルが選択されています。提案された名前とクラスタ リージョンを変更したり、他の変更を行ったりできます。Dataproc の自動ゾーン プレースメントがフレキシブル VM リストで指定された VM タイプの可用性が最適なゾーンを選択できるように、クラスタの [ゾーン] として [任意] が選択されていることを確認します。

  3. [ノードの構成] パネルを選択します。[セカンダリ ワーカー ノード] セクションで、セカンダリ ワーカーの数とプリエンプティブを指定します。

    • セカンダリ ワーカーのランクごとに [セカンダリ ワーカーを追加] をクリックし、各ランクに含める 1 つ以上のマシンタイプを指定します。
  4. クラスタ作成パネルでクラスタの詳細を確認して指定したら、[作成] をクリックします。

gcloud

gcloud dataproc clusters create コマンドを使用して複数の secondary-worker-machine-types フラグを追加し、Dataproc セカンダリ ワーカーにランキングされるフレキシブル VM リストを指定します。デフォルトのフレキシブル VM セカンダリ ワーカー タイプは Spot であり、プリエンプティブル タイプです。

次の gcloud CLI の例では、Dataproc は最初に n2-standard-8 VM(ランク 0)を持つセカンダリ ワーカーをプロビジョニングしようとします。n2-standard-8 マシンが使用できない場合、Dataproc は e2-standard-8 VM または t2d-standard-8 VM(ランク 1)のいずれかを持つセカンダリ ワーカーをプロビジョニングしようとします。

gcloud dataproc clusters create CLUSTER_NAME \
    --region=REGION \
    --zone="" \
    --master-machine-type=n1-standard-8 \
    --worker-machine-type=n1-standard-8 \
    --num-workers=4 \
    --num-secondary-workers=4 \
    --secondary-worker-type=non-preemptible \
    --secondary-worker-machine-types="type=n2-standard-8,rank=0" \
    --secondary-worker-machine-types="type=e2-standard-8,type=t2d-standard-8,rank=1"

メモ:

  • --zone="": フレキシブル VM 機能では、Dataproc が使用可能な VM タイプがあるゾーンを選択できるように、Dataproc の自動ゾーン プレースメントが必要です。空の値("")を --zone フラグに渡すと、デフォルトの gcloud config list で指定されたゾーンの選択がオーバーライドされます。

  • Dataproc は、マシンのコアとメモリに基づいてコンポーネント role プロパティを生成します。システムによって生成されたこれらのプロパティは、次の構文を使用して --properties フラグでオーバーライドできます。

    --properties="ROLE:MACHINE_TYPE:COMPONENT_PREFIX:COMPONENT_PROPERTY=VALUE"
    

    プレビュー リリースでは、secondary_worker ロールのみがサポートされているロールです。

    次の例では、--properties フラグによって、セカンダリ ワーカー ノードに割り当てられた e2-standard-8 マシンのコア数が 8 から 6 に変更されます。

    --properties="secondary_worker:e2-standard-8:yarn:yarn.nodemanager.resource.cpu-vcores=6"
    

API

Dataproc API clusters.create リクエストの一部として instanceFlexibilityPolicy.instanceSelectionList を使用して、セカンダリ ワーカーのマシンタイプのランク付けされたリストを指定します。

例:

Dataproc clusters.createリクエスト本文 の次の JSON スニペットは、ランク 0 とランク 1 のセカンダリ ワーカー マシンタイプを指定します。

"config": {
  "secondaryWorkerConfig": {
    "instanceFlexibilityPolicy": {
      "instanceSelectionList": [
        {
          "machineTypes": [
            "n1-standard-4",
            "n2-standard-4"
          ],
          "rank": 0
        },
        {
          "machineTypes": [
            "e2-standard-4",
            "n2d-standard-4"
          ],
          "rank": 1
        }
      ]
    }
  }
}

クラスタ プロパティを使用してコンポーネント ロールをカスタマイズする: Dataproc は、VM コアとメモリに基づいてコンポーネント role プロパティを生成します。システムによって生成されたプロパティをオーバーライドするには、次の key=value 構文を使用して SoftwareConfig.propertiesclusters.create リクエストに追加します。

ROLE:MACHINE_TYPE:COMPONENT_PREFIX:COMPONENT_PROPERTY=VALUE

プレビュー リリースでは、secondary_worker ロールのみがサポートされているロールです。

次の例では、properties フィールドによって、e2-standard-8 VM のセカンダリ ワーカー ノードに割り当てられているコアの数が 8 から 6 に変更されます。

"secondary_worker:e2-standard-8:yarn:yarn.nodemanager.resource.cpu-vcores=6"