除了使用標準 Compute Engine VM 做為 Dataproc worker (稱為「主要」worker) 之外,Dataproc 叢集也可以使用 secondary worker。
Dataproc 叢集中的所有次要 worker 都具有下列特徵:
僅處理:次要 worker 不會儲存資料,只能當做處理節點。因此,您可以使用次要 worker 擴充運算資源,不用擴充儲存空間。
禁止只使用次要 worker 的叢集:叢集必須要有主要 worker。如果您建立叢集時未指定主要 worker 數量,Dataproc 會在叢集中新增兩個主要 worker。
機型:根據預設,次要 worker 會採用叢集主要 worker 的機型。舉例來說,如果您建立的叢集主要 worker 使用
n1-standard-4機器類型,則根據預設,新增至叢集的所有次要 worker 也會使用n1-standard-4機器。您可以為次要 worker 指定一或多個機型排名清單,而不使用次要 worker 的預設主要 worker 機型。詳情請參閱「Dataproc 彈性 VM」。
永久磁碟大小:根據預設,次要 worker 會以 1000 GB 或主要 worker 開機磁碟大小的較小值建立。這個磁碟空間用於本機快取資料,無法透過 HDFS 存取。您可以在建立叢集時,使用
gcloud dataproc clusters create --secondary-worker-boot-disk-size指令覆寫預設磁碟大小。即使叢集建立時沒有次要 worker,您也可以指定這個標記。非同步建立:建立或擴充叢集時新增的次要 worker,可能在建立或更新作業完成時尚未佈建。這是因為 Dataproc 會使用代管執行個體群組 (MIG) 管理次要 worker,只要可以佈建 VM,就會非同步建立 VM (請參閱「檢查代管執行個體的狀態」)。
先占和非先占次要 worker
次要 worker 有三種類型:Spot VM、標準先占 VM 和非先占 VM。預設的 Dataproc 次要 worker 類型為標準先占 VM。您可以指定 Spot 和非先占次要 worker 的組合。
舉例來說,如果您在建立叢集時選取三個次要 worker,可以指定三個 Spot VM、三個先占 VM、三個非先占 VM,或 Spot 和非先占 worker 的組合。
先占 worker
雖然先占 worker 可能遭到移除,進而影響工作穩定性,但您或許仍會決定使用先占執行個體,以降低一般資料處理作業的每小時運算成本,或以較低的總成本建立非常龐大的叢集 (您可以使用 Google Cloud Pricing Calculator 估算成本)。
為獲得最佳結果,叢集中的先占 worker 數量應少於叢集內所有 worker 總數 (主要 worker 加上所有次要 worker) 的 50%。
使用先占 worker 時,與在非先占 worker 上執行的工作相比,工作最有可能會發生更多暫時性的單一 worker 工作失敗。如要提高工作對低階工作失敗的容許能力,您可以設定類似於自動調度資源叢集使用的預設屬性值的叢集屬性值,以增加任務重試次數上限,並避免工作失敗。
節省成本的考量:使用先占 VM 不一定能節省成本,因為先占可能會導致工作執行時間變長,進而提高工作成本。雖然搭配先占 VM 使用強化版彈性模式 (EFM) 有助於減輕這種結果,但先占 VM 的整體成本節省幅度會因使用案例而異。一般來說,先占 VM 較適合短期工作,因為工作執行期間遭先占的機率較低。嘗試不同的工作選項,例如不使用先占 VM,以及使用 EFM 的先占 VM,估算成本並找出最佳解決方案。
非先占 worker
- 您可以建立具有非先占次要 worker 的叢集,在不影響工作穩定性的情況下擴充運算資源。如要這麼做,請將
non-preemptible指定為次要 worker 類型。您可以混合使用非先占和 Spot 次要 worker。
選取次要 worker
使用 Google Cloud 控制台、gcloud CLI 或 Dataproc API 建立叢集時,可以指定次要 worker 的數量和類型。
- 您可以混合使用 Spot 與非先占次要 worker。
- 叢集建立完成後,您可以更新叢集來變更次要 worker 的數量,但無法變更類型。
- 標籤更新會在 24 小時內套用至所有先占次要 worker,但不會套用至現有的非先占次要 worker。在標籤更新之後才新增至叢集的所有 worker,也會套用標籤更新。舉例來說,如果擴充叢集資源,所有新增的主要和次要 worker 都會套用新標籤。
控制台
在 Google Cloud 控制台建立 Dataproc 叢集時,可以指定次要 worker 的數量。叢集建立完成後,您可以透過Google Cloud 控制台編輯叢集設定,新增及移除次要 worker。
建立含有次要 worker 的叢集
您可以在 Google Cloud 控制台的 Dataproc「Create a cluster」(建立叢集)頁面上,透過「Configure nodes」(設定節點) 面板的「Secondary worker nodes」(次要 woker 節點) 部分,設定要為新叢集套用的次要 worker 數量和類型。請分別在「Secondary worker nodes」(次要 worker 節點) 和「Preemptibility」(先占功能) 欄位中,指定次要 worker 的數量和類型。
更新含有次要執行個體的叢集
如要更新叢集中的次要 worker 數量,請在 Google Cloud 控制台的「Clusters」(叢集) 頁面中,按一下想更新的叢集名稱。接著在「Cluster details」(叢集詳細資料) 頁面中,依序按一下「Configuration」(設定) 分頁標籤和「Edit」(編輯),並更新「Secondary worker nodes」(次要 worker 節點) 欄位中的數值。
從叢集中移除所有次要執行個體
如要從叢集中移除所有次要 worker,請按照先前的說明更新叢集設定,並在「Secondary worker nodes」(次要 worker 節點) 欄位中指定 0。
Google Cloud CLI 指令
建立叢集時,請使用 gcloud dataproc clusters create 指令在叢集中新增次要 worker。建立叢集後,您可以使用 gcloud dataproc clusters update 指令,在叢集中新增或移除次要 worker (可以更新次要 worker 的數量,但無法更新類型)。
建立含有次要 worker 的叢集
如要建立含有次要 worker 的叢集,請使用 gcloud dataproc clusters create 指令搭配 --num-secondary-workers 引數。根據預設,次要 worker 是標準先占 VM。建立叢集時,您可以將 --secondary-worker-type 旗標設為「non-preemptible」或「spot」,指定非先占或 Spot 次要 worker。下列範例說明如何建立叢集,並指定各類次要 worker:「preemptible」(預設)、Spot (先占) 和非先占。您可以使用其他旗標,混合使用 Spot 與非先占次要 worker。
下列指令會建立「cluster1」,並加入兩個標準先占 (預設類型) 次要 worker。
gcloud dataproc clusters create cluster1 \ --num-secondary-workers=2 \ --region=us-central1
下列指令會使用 secondary-worker-type 旗標建立「cluster2」,並加入兩個 Spot (先占) 次要 worker。
gcloud dataproc clusters create cluster2 \ --num-secondary-workers=2 \ --secondary-worker-type=spot \ --region=us-central1
範例 3
下列指令會使用 secondary-worker-type 旗標建立「cluster3」,並加入兩個非先占次要 worker。
gcloud dataproc clusters create cluster3 \ --num-secondary-workers=2 \ --secondary-worker-type=non-preemptible \ --region=us-central1
gcloud dataproc clusters create --secondary-worker-boot-disk-size 指令覆寫預設磁碟大小。即使叢集在建立時沒有任何次要 worker,您也可以指定這個旗標。
讓 Google Cloud 控制台建構叢集建立要求。
您可以在 Dataproc「Create a cluster」(建立叢集) 頁面左側面板的底部按一下「Equivalent REST or command line」(對等 RET 或指令列) 連結,讓 Google Cloud 控制台建構對等 API REST 要求或 gcloud 工具指令。更新含有次要 worker 的叢集
如要更新叢集來新增或移除次要 worker,請使用 gcloud dataproc clusters update 指令並搭配 --num-secondary-workers 旗標。
下列指令會將 example-cluster 更新成使用四個次要 worker (預設類型或建立叢集時指定的類型)。
gcloud dataproc clusters update example-cluster \ --num-secondary-workers=4 \ --region=us-central1
從叢集中移除所有次要 worker
如要從叢集中移除所有次要 worker,請使用 gcloud dataproc clusters update 指令,並將 --num-secondary-workers 設為 0。
下列指令會從「example-cluster」中移除所有次要 worker。
gcloud dataproc clusters update example-cluster \ --num-secondary-workers=0 \ --region=us-central1
REST API
建立含有次要 worker 的叢集
建立叢集時,請使用 Dataproc clusters.create API 在叢集中新增次要 worker。下列範例說明如何使用各個次要 worker 類型建立叢集:preemptible (預設)、spot (先占) 和 non-preemptible。您可以使用其他欄位,混合使用 Spot 和非先占次要 worker。
下列 POST 要求會建立「cluster1」,並加入兩個標準先占 (預設類型) VM worker。
POST https://dataproc.googleapis.com/v1/projects/project-id/regions/region/clusters
{
"clusterName": "cluster1",
"config": {
"secondaryWorkerConfig": {
"numInstances": 2
}
}
}
下列 POST 要求會建立「cluster2」,並加入兩個 Spot (先占) VM worker。
POST https://dataproc.googleapis.com/v1/projects/project-id/regions/region/clusters
{
"clusterName": "cluster2",
"config": {
"secondaryWorkerConfig": {
"numInstances": 2,
"preemptibility": "SPOT"
}
}
}
範例 3
下列 POST 要求會建立「cluster3」,並加入兩個非先占次要 worker。
POST https://dataproc.googleapis.com/v1/projects/project-id/regions/region/clusters
{
"clusterName": "cluster3",
"config": {
"secondaryWorkerConfig": {
"numInstances": 2,
"preemptibility": "NON_PREEMPTIBLE"
}
}
}
更新含有次要 worker 的叢集
請使用 Dataproc clusters.patch API,新增及移除次要 worker。
範例下列 PATCH 要求會將叢集更新為包含四個次要 worker (預設類型或您建立叢集時指定的類型)。
PATCH /v1/projects/project-id/regions/region/clusters/cluster-name?updateMask=config.secondary_worker_config.num_instances
{
"config": {
"secondaryWorkerConfig": {
"numInstances": 4
}
}
}
解決次要 worker 問題
服務帳戶權限問題:次要 worker 是透過代管執行個體群組建立。 如果發生權限問題,Dataproc 記錄不會回報建立次要 worker 失敗,但失敗的 worker 會列在Google Cloud 控制台「Cluster details」(叢集詳細資料) 頁面的「VM Instances」(VM 執行個體) 分頁中,且不會加上綠色勾號。如要查看清單,請開啟 Dataproc「Clusters」(叢集) 頁面,然後按一下叢集名稱,開啟該叢集的「Cluster details」(叢集詳細資料) 頁面。
代管執行個體群組權限問題:如要檢查代管執行個體群組權限是否有問題,請按照下列步驟操作:
- 找出代管執行個體群組的名稱 (
instanceGroupManagerName)。控制台
- 開啟 Dataproc「Clusters」(叢集) 頁面,然後按一下叢集名稱,開啟該叢集的「Cluster details」(叢集詳細資料) 頁面。
- 按一下頁面底部的「Equivalent REST」(對等 REST),然後查看
config.secondaryWorkerConfig.managedGroupConfig.instanceGroupManagerName值。
Google Cloud CLI
執行gcloud dataproc clusters describe指令並搭配--format旗標,即可顯示instanceGroupManagerName。gcloud dataproc clusters describe CLUSTER_NAME \ --region=REGION \ --format='value(config.secondaryWorkerConfig.managedGroupConfig.instanceGroupManagerName)'
REST API
提出clusters.get要求,傳回config.secondaryWorkerConfig.managedGroupConfig.instanceGroupManagerName的值。 - 在 Logs Explorer 中查看記錄檔。
選取
Google Compute Engine Instance Group資源類型,然後依代管執行個體群組名稱篩選。或者,您也可以套用記錄檔篩選器,以取得「resource.type="gce_instance_group」和
resource.labels.instance_group_name=INSTANCE_GROUP_MANAGER_NAME。
- 找出代管執行個體群組的名稱 (
搭配使用 Spot 與非先占次要 worker
建立 Dataproc 叢集時,您可以指定 Spot 和非先占次要 worker 的組合。
次要 worker 設定,可將 Spot 與非先占次要 worker 搭配使用
建立 Dataproc 叢集時,請使用下列次要 worker 設定,取得最低的次要 worker 容量,並在 Spot VM 可用時增加容量:
次要 worker 數量:要佈建的次要 worker 總數。
次要 worker 類型:
spot是混合使用 Spot 與非先占次要 worker 時的次要 worker 類型。standardCapacityBase:要佈建的非先占 (標準) 次要 worker 數量。系統會先佈建非先占型次要 worker,再佈建其他類型的次要 worker。
standardCapacityPercentAboveBase:填入次要 worker 的
standardCapacityBase數量後,為達到要求的次要 worker 總數,剩餘的次要 worker 會以非先占和 Spot VM 的組合填入,如下所示:standardCapacityPercentAboveBase:要以非先占 VM 填入的剩餘次要 worker 百分比。- 系統會以 Spot VM 填入剩餘數量,以達到要求的次要 worker 總數。
範例:
- 次要 worker 數量:15
standardCapacityBase:5standardCapacityPercentAboveBase30%
結果:
- 非先占:8 = 5 (
standardCapacityBase) + 3 (剩餘 10 個的 30%) - Spot:7 (剩餘 10 個的 70%)
- 總計 = 15
建立叢集,並搭配使用 Spot 和非先占次要 worker
建立叢集時,您可以使用 gcloud CLI 或 Dataproc API,將 Spot 與非先占次要 worker 混合使用。
gcloud
在本機或 Cloud Shell 中執行下列指令,建立叢集,並混合使用 Spot 和非先占次要 worker。
gcloud dataproc clusters create CLUSTER_NAME \ --project=PROJECT_ID \ --region=REGION \ --secondary-worker-type=spot \ --num-secondary-workers=NUMBER_SECONDARY_WORKERS \ --secondary-worker-standard-capacity-base=STANDARD_CAPACITY_BASE \ --secondary-worker-standard-capacity-percent-above-base=STANDARD_CAPACITY_PERCENT_ABOVE_BASE \ OTHER_FLAGS_AS_NEEDED
注意:
- CLUSTER_NAME:新叢集的名稱。
- PROJECT_ID:您的 Google Cloud 專案 ID。 專案 ID 會列在 Google Cloud 控制台資訊主頁的「Project info」(專案資訊) 部分。
- REGION:可執行工作負載的 Compute Engine 區域。
--secondary-worker-type:如果混合使用 Spot 與非先占次要 worker,請將次要 worker 類型指定為spot。- STANDARD_CAPACITY_BASE 和 STANDARD_CAPACITY_PERCENT_ABOVE_BASE:請參閱次要 worker 設定,將 Spot 與非先占次要 worker 搭配使用。
- OTHER_FLAGS_AS_NEEDED:請參閱 gcloud dataproc clusters create。
API
如要搭配使用 Spot 與非先占次要 worker員,請在 cluster.create 要求中,設定 Dataproc preemptibility、standardCapacityBase 和 standardCapacityPercentAboveBase API 欄位,如下列 JSON 範例所示:
{
"clusterName": "CLUSTER_NAME",
"config": {
"secondaryWorkerConfig": {
"numInstances": 15,
"preemptibility": "spot",
"instanceFlexibilityPolicy": {
"provisioningModelMix": {
"standardCapacityBase": STANDARD_CAPACITY_BASE
"standardCapacityPercentAboveBase": STANDARD_CAPACITY_PERCENT_ABOVE_BASE
}
}
}
}
}
注意:
- CLUSTER_NAME:新叢集的名稱。
preemptibility:如果搭配使用 Spot 與非先占次要 worker,請指定spot。- STANDARD_CAPACITY_BASE 和 STANDARD_CAPACITY_PERCENT_ABOVE_BASE:請參閱次要 worker 設定,將 Spot 與非先占次要 worker 搭配使用。
結合次要 worker 混合與彈性 VM
建立叢集時,您可以搭配使用 Spot 與非先占次要 worker,並為次要 worker 指定彈性 VM 形狀。
gcloud CLI 範例:
gcloud dataproc clusters create cluster-name \ --project=project-id \ --region=us-central1 \ --secondary-worker-type=spot \ --num-secondary-workers=15 \ --secondary-worker-standard-capacity-base=5 \ --secondary-worker-standard-capacity-percent-above-base=30 \ --secondary-worker-machine-types="type=n2-standard-8,rank=0" \ --secondary-worker-machine-types="type=e2-standard-8,type=t2d-standard-8,rank=1" ...other flags as needed
次要 worker 混合特性
本節說明搭配使用 Spot 與非先占次要 worker 時,會出現的行為和特性。
次要 worker 偏好設定
在次要 worker 上排定應用程式時,Dataproc 不會優先使用 Spot 或非先占 VM。
次要 worker 資源調度
透過自動調度資源或手動調度資源擴充次要 worker 時,Dataproc 會在新增次要 worker 時,維持要求的 Spot 與非先占比例。
更新次要 worker 混合設定
建立 Dataproc 叢集時,您可以指定 Spot 與非先占次要 worker 的組合。叢集建立完成後,您就無法變更次要 worker 組合設定。
偵測次要 worker 先占
- Dataproc 不會控管 Spot VM 先占時機 (請參閱「Spot VM 先占」)。
- 發生 Spot VM 先占時,次要 worker 群組可以暫時以較低的容量執行,直到 Compute Engine 重新佈建遭先占的 VM 為止。
- Dataproc 不會為次要 worker 群組新增超出群組初始設定的容量。