優先使用彈性 VM 類型

彈性 VM 是 Managed Service for Apache Spark 的一項功能,可讓您在建立 Managed Service for Apache Spark 叢集時,為 Managed Service for Apache Spark 主節點、主要節點和次要工作站節點指定VM 類型的優先順序清單。

為什麼要使用彈性 VM?

先前提交叢集建立要求時,如果 VM 類型無法使用,要求就會失敗,您必須更新要求、指令碼或程式碼,指定「次佳」VM 類型。這個重新要求程序可能需要多次反覆操作,直到您指定可用的 VM 類型為止。

Managed Service for Apache Spark 彈性 VM 功能會從已排序的 VM 清單中選取主要、主要和次要 worker VM 類型,然後在指定叢集區域中搜尋列出的 VM 類型可用的區域,協助您成功建立叢集。

限制

使用彈性 VM 的叢集無法停止

術語

  • 虛擬機器類型: 虛擬機器執行個體的系列、記憶體容量和 CPU 核心數。 Managed Service for Apache Spark 支援使用預先定義和自訂 VM 類型
  • 主要和主要工作站節點:叢集有一個主要節點,以及至少兩個主要工作站。
  • 次要工作站: 次要工作站 為選用項目,不會儲存資料,這些節點僅做為處理節點,您可以使用次要工作站擴充運算資源,不必擴充儲存空間。彈性 VM 的預設次要工作站類型為 Spot VM,屬於先占類型 (請參閱「Managed Service for Apache Spark 次要工作站」)。

用量

  • 彈性 VM 適用於 Compute Engine 2.0.74+2.1.76+2.2.42+ 版以上,以及映像檔版本的 Managed Service for Apache Spark。
  • 使用主要或主要工作站彈性 VM 建立叢集時,所需時間會較長 (大約會多出 32 秒)。
  • 叢集名稱不得超過 45 個字元。
  • 所有 VM 類型都必須使用相同的磁碟類型。
  • 您最多可以指定五個已排序的 VM 類型清單,每個清單最多可包含 10 個 VM 類型。詳情請參閱「如何要求彈性 VM」。
  • 如要使用彈性 VM 建立叢集,必須使用 Managed Service for Apache Spark 自動選擇區域位置,讓 Managed Service for Apache Spark 選擇有足夠容量的區域,以滿足您的 VM 類型要求。
  • 如果叢集建立要求包含自動調度資源政策,彈性 VM 可以來自不同 VM 系列,但必須具有相同記憶體容量和核心數。
  • 佈建彈性 VM 時,Managed Service for Apache Spark 會使用「任何相符」的可用預留項目,但不會使用「特定」預留項目 (請參閱「使用預留執行個體」)。系統會先選取符合預留項目的機型,然後選取 CPU 數量最多的 VM 類型。
  • Managed Service for Apache Spark 會對彈性 VM 佈建套用配額 Google Cloud
  • 雖然您可以為叢集中的主要和次要工作站 V 類型指定不同的 CPU 與記憶體比率,但這可能會導致效能下降,因為系統會將最小的 CPU 與記憶體比率做為最小的容器單元。
  • 如果您更新使用彈性 VM 建立的叢集,Managed Service for Apache Spark 會從您建立叢集時提供的彈性 VM 清單中選取並新增工作站。

如何要求彈性 VM

使用 Google Cloud 控制台、Google Cloud CLI 或 Managed Service for Apache Spark API 建立 Managed Service for Apache Spark 叢集時,可以指定彈性 VM。

  • 您最多可以指定五個已排序的 VM 類型清單,每個清單最多可包含 10 個 VM 類型。排名最低的名單優先順序最高。根據預設,彈性 VM 清單的等級為 0。在清單中,Managed Service for Apache Spark 會優先使用有未用預留項目的 VM 類型,其次是最大的 VM 大小。清單中 CPU 數量相同的 VM 類型會視為相同。

控制台

如要建立具有次要工作站彈性 VM 的叢集,請執行下列指令:

  1. 在 Google Cloud 控制台中,開啟 Managed Service for Apache Spark 的「Create a cluster on Compute Engine」(在 Compute Engine 上建立叢集) 頁面。
  2. 系統會選取「設定叢集」面板,並在欄位中填入預設值。您可以變更建議的名稱和叢集區域,以及進行其他變更。請務必選取「Any」(任何) 做為叢集區域,允許 Managed Service for Apache Spark 自動選擇區域位置選擇 VM 類型可用性最佳的區域,這些 VM 類型會列在彈性 VM 清單中。
  3. 選取「設定節點」面板。在「次要工作站節點」部分,指定次要工作站的數量和先占性。
    • 針對每個次要工作站等級,按一下「新增次要工作站」,並指定要納入每個等級的一或多個機器類型。
  4. 在叢集建立面板中確認並指定叢集詳細資料後,按一下「建立」

gcloud

使用 gcloud dataproc clusters create 指令新增多個 master-machine-typesworker-machine-typessecondary-worker-machine-types 旗標,為主要、主要和次要工作站指定已排序的彈性 VM 清單。

以下範例會要求主節點、主要和次要 VM 類型,並設定下列優先順序:

  • 如果 e2-standard-8 VM 可用 (等級 0),則佈建這類 VM;如果 e2-standard-8 機器無法使用,則佈建 n2-standard-8 VM (等級 1)。

由於未指定次要 worker 類型,系統會佈建可先占的 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 自動選擇區域位置,Managed Service for Apache Spark 才能選擇可用的 VM 類型區域。將空值 ("") 傳遞至 --zone 旗標,即可覆寫預設 gcloud config list 中指定的任何區域選取項目。

API

在 Managed Service for Apache Spark API clusters.create 要求中使用 instanceFlexibilityPolicy.instanceSelectionList,為主要、次要和次要工作站指定 machineTypes 的排序清單。

範例:下列 clusters.create 要求主體 的 JSON 程式碼片段,指定等級 0 和等級 1 的主要 (masterConfig)、主要工作站 (workerConfig) 和次要工作站 (secondaryWorkerConfig) 機器類型。

{
  "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 屬性

Managed Service for Apache Spark 會在叢集層級設定屬性。建立使用彈性 VM 的叢集時,您可以覆寫主要和次要工作站彈性 VM 類型系統產生的屬性。

gcloud

如要在建立叢集時覆寫屬性,請使用 --properties 旗標,語法如下:

--properties="$ROLE:$MACHINE_TYPE:$COMPONENT_PREFIX:$COMPONENT_PROPERTY=$VALUE"
  • ROLE 可以是 primary_workersecondary_worker
  • 如有多個資源,請以半形逗號分隔。

執行下列 gcloud dataproc clusters create 指令,覆寫 YARN 在次要工作站上為 NodeManager 分配的 vCPU 數量。本範例會將所有 e2-standard-8n2-standard-8 次要 worker 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_workersecondary_worker

下列 SoftwareConfig 物件會覆寫 YARN 為次要工作站上的 NodeManager 分配的 vCPU 數量。這個範例會將所有 e2-standard-8n2-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"
  }
}

後續步驟