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