彈性 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 類型可用的區域,協助您成功建立叢集。
限制
術語
- 虛擬機器類型:虛擬機器執行個體的系列、記憶體容量和 CPU 核心數。Managed Service for Apache Spark 支援使用預先定義和自訂 VM 類型。
- 主要和主要工作節點:根據預設,Managed Service for Apache Spark 叢集有一個主要節點和兩個主要工作節點。
- 高可用性 (HA) 叢集有三個主要節點。
- 單一節點叢集有一個節點,可做為主要和 worker 節點。
- 零規模叢集只有主要節點和次要 worker,沒有主要 worker。
- 次要工作站節點: 次要工作站不會儲存資料,僅做為處理節點。 您可以使用次要 worker 擴充運算資源,不必擴充儲存空間。彈性 VM 的預設次要工作站類型為 Spot VM,屬於先占類型。
用量
- 在 Managed Service for Apache Spark 上,彈性 VM 適用於 Managed Service for Apache Spark
2.0.74+、2.1.76+、2.2.42+和後續的映像檔版本。 *. 從映像檔版本3.0開始,如果您建立叢集時未指定叢集節點的機型,Managed Service for Apache Spark 會根據彈性 VM 機型的排名清單指定節點,例如 N4、N2 和 E2 系列機型的排名清單,並根據資源可用性進行最佳化。 - 您最多可以指定五個已排序的 VM 類型清單,每個清單最多可包含 10 個 VM 類型。
您可以在工作流程範本中加入彈性 VM,在從範本建立叢集時,提供資源無法使用的復原能力。
建議:啟用 Managed Service for Apache Spark 自動區域放置,讓 Managed Service for Apache Spark 選擇有容量可佈建所要求 VM 的區域。
根據預設,叢集節點必須使用一種磁碟類型。您可以透過磁碟覆寫,為 Flex VM 叢集節點指定不同機型時,使用不同磁碟類型。
雖然您可以為叢集中的主要和次要 worker VM 類型指定不同的 CPU 與記憶體比率,但這可能會導致效能下降,因為系統會將最小的 CPU 與記憶體比率做為最小的容器單元。
如果叢集建立要求包含自動調度資源政策,彈性 VM 可以來自不同 VM 系列,但必須具有相同記憶體容量和核心數。
系統會先選取符合預留項目的機型,然後選取 CPU 數量最多的 VM 類型。
Managed Service for Apache Spark 會對彈性 VM 佈建套用 Google Cloud 配額。
如果您更新使用彈性 VM 建立的叢集,Managed Service for Apache Spark 會從您建立叢集時提供的彈性 VM 清單中選取並新增工作站。
如何申請使用彈性 VM
您最多可以指定五個已排序的 VM 類型清單,每個清單最多可包含 10 個 VM 類型。排名最低的名單優先順序最高。根據預設,彈性 VM 清單的等級為 0。在清單中,Managed Service for Apache Spark 會優先使用有未用預留項目的 VM 類型,其次是最大的 VM 大小。清單中 CPU 數量相同的 VM 類型會視為相同。
使用 Google Cloud 控制台、Google Cloud CLI 或 Dataproc API 建立 Managed Service for Apache Spark 叢集時,可以要求彈性 VM。
控制台
如要建立具有彈性 VM 的叢集,請執行下列操作:
- 開啟「建立叢集」頁面。
- 按一下「其他設定」展開該部分。
- 編輯主要 worker 或次要 worker。 在「新增 worker 類型」下方,指定其他有排名的 VM。
gcloud
使用 gcloud dataproc clusters create 指令搭配 master-instance-selection、worker-instance-selection 和 secondary-worker-instance-selection 旗標,為主要、主要和次要工作站指定已排序的彈性 VM 清單。
以下範例會要求主節點、主要和次要 VM 類型,並設定下列優先順序:
- 如果可用,請佈建
e2-standard-8VM (等級 0);如果e2-standard-8機器無法使用,請佈建n2-standard-8VM (等級 1)。
由於未指定次要 worker 類型,系統會佈建先占型 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
在 Dataproc 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 規格中,為每個機型 (執行個體選取項目) 指定磁碟覆寫。您可藉此自訂開機磁碟、覆寫本機 SSD,以及為特定機器類型連結額外磁碟。
磁碟覆寫選項和規則
磁碟覆寫設定選項:
- 基本磁碟設定:為叢集節點指定的磁碟設定,例如使用 gcloud CLI
--worker-boot-disk-size旗標或workerConfig.diskConfig.bootDiskSizeGbDataproc API 欄位,為主要工作站指定開機磁碟大小。 - 執行個體選取磁碟覆寫:為叢集節點指定的機器類型設定磁碟。
磁碟覆寫設定規則:
基本磁碟設定:如果叢集節點的執行個體選取項目未包含
diskConfig覆寫,您可以為節點定義基本磁碟設定。這個基本磁碟設定會套用至節點的所有執行個體選項。執行個體選取磁碟設定:如果叢集節點的執行個體選取項目包含
diskConfig覆寫,節點群組中的所有執行個體選取項目都必須包含diskConfig(如果您也為節點定義基礎磁碟設定,就會發生驗證錯誤)。機型相容性:單一
InstanceSelection中的所有機型都必須與指定的diskConfig相容。舉例來說,您無法在同一個執行個體選取項目中,將不支援 Hyperdisk 的e2-standard-4機型,與需要 Hyperdisk 的n4-standard-4機型分組,因為diskConfig無法同時滿足這兩種機型。本機 SSD 支援:如果您在磁碟覆寫設定中設定本機 SSD (
numLocalSsds> 0),執行個體選取畫面中的所有機型都必須支援本機 SSD。強制磁碟覆寫設定欄位:
- 如果您為執行個體選取項目定義
diskConfig,則必須提供bootDiskType。 - 如果您定義
attachedDiskConfigs,則每個連結的磁碟都必須有diskType和diskSizeGb。
- 如果您為執行個體選取項目定義
磁碟覆寫設定範例
下列範例會為叢集節點指定下列磁碟覆寫設定選項:
- 主節點:使用預設開機磁碟。
- 主要 worker:根據每個執行個體選取項目使用自訂磁碟:例如
n4-standard-4使用hyperdisk-balanced,而n2-standard-4使用pd-standard。 - 次要 worker:使用自訂基本磁碟設定:
pd-ssd,這項設定會套用至所有執行個體選取項目。200 GB
gcloud YAML
在主要、主要工作站和次要工作站節點的 YAML 檔案中,定義彈性 VM 政策:
master-flex-policy.yaml:instanceFlexibilityPolicy: instanceSelectionList: - machineTypes: - e2-standard-8 rank: 0 - machineTypes: - n2-standard-8 rank: 1worker-flex-policy.yaml:instanceFlexibilityPolicy: instanceSelectionList: - machineTypes: - n4-standard-4 rank: 0 diskConfig: bootDiskType: hyperdisk-balanced bootDiskSizeGb: 100 bootDiskProvisionedIops: 6000 bootDiskProvisionedThroughput: 400 attachedDiskConfigs: - diskType: hyperdisk-throughput diskSizeGb: 300 - machineTypes: - n2-standard-4 rank: 0 diskConfig: bootDiskType: pd-standard bootDiskSizeGb: 400secondary-worker-flex-policy.yaml:instanceFlexibilityPolicy: instanceSelectionList: - machineTypes: - e2-standard-8 rank: 0 - machineTypes: - n2-standard-8 rank: 1
使用 gcloud dataproc clusters create 指令傳遞政策檔案:
gcloud dataproc clusters create CLUSTER_NAME \
--region=REGION \
--zone="" \
--num-masters=1 \
--master-instance-flexibility-policy-file=master-flex-policy.yaml \
--num-workers=10 \
--worker-instance-flexibility-policy-file=worker-flex-policy.yaml \
--num-secondary-workers=4 \
--secondary-worker-boot-disk-type=pd-ssd \
--secondary-worker-boot-disk-size=200 \
--secondary-worker-instance-flexibility-policy-file=secondary-worker-flex-policy.yaml
gcloud JSON
使用 gcloud dataproc clusters create 指令,在 --worker-instance-selection 中加入內嵌 JSON diskConfig 規格:
gcloud dataproc clusters create CLUSTER_NAME \
--region=REGION \
--zone="" \
--num-masters=1 \
--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":["n4-standard-4"],"rank":0,"diskConfig":{"bootDiskType":"hyperdisk-balanced","bootDiskSizeGb":100,"bootDiskProvisionedIops":6000,"bootDiskProvisionedThroughput":400,"attachedDiskConfigs":[{"diskType":"hyperdisk-throughput","diskSizeGb":300}]}}' \
--worker-instance-selection='{"machineTypes":["n2-standard-4"],"rank":0,"diskConfig":{"bootDiskType":"pd-standard","bootDiskSizeGb":400}}' \
--num-secondary-workers=4 \
--secondary-worker-boot-disk-type=pd-ssd \
--secondary-worker-boot-disk-size=200 \
--secondary-worker-instance-selection='{"machineTypes":["e2-standard-8"],"rank":0}' \
--secondary-worker-instance-selection='{"machineTypes":["n2-standard-8"],"rank":1}'
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
}
]
}
}
}
}
覆寫彈性 VM 屬性
Managed Service for Apache Spark 會在叢集層級設定屬性。建立使用彈性 VM 的叢集時,您可以覆寫主要和次要工作站彈性 VM 類型的系統產生屬性。
gcloud
如要在建立叢集時覆寫屬性,請使用 --properties 旗標,語法如下:
--properties="$ROLE:$MACHINE_TYPE:$COMPONENT_PREFIX:$COMPONENT_PROPERTY=$VALUE"
- ROLE 可以是
primary_worker或secondary_worker。 - 如有多個資源,請以半形逗號分隔。
下列 gcloud dataproc clusters create 指令會覆寫 YARN 為次要 worker 上的 NodeManager 分配的 vCPU 數量。本範例會將所有 e2-standard-8 和 n2-standard-8 次要 worker VM 的 yarn-site.xml 中 yarn.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 物件會覆寫 YARN 為次要工作站上的 NodeManager 分配的 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"
}
}