Dataproc フレキシブル VM

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

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

以前は、クラスタ作成リクエストの送信時に VM タイプが利用できない場合、リクエストが失敗し、「次善の」VM タイプを指定するようにリクエスト、スクリプト、またはコードを更新する必要がありました。利用可能な VM タイプを指定するまで、この再リクエスト プロセスが複数回繰り返されることがあります。

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

用語

  • VM タイプ: VM インスタンスのファミリー、メモリ容量、CPU コア数。Dataproc では、事前定義およびカスタムの 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 タイプは同じように扱われます。

Console

セカンダリ ワーカー フレキシブル 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 を使用して、セカンダリ ワーカーのmachineTypesのランク付けされたリストを指定します。

例:

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"