除了使用標準 Compute Engine VM 做為 Dataproc 工作站 (稱為「主要」工作站) 之外,Dataproc 叢集也可以使用 secondary
工作站。
Dataproc 叢集中的所有次要工作人員都具有下列特徵:
僅處理:次要工作人員不會儲存資料。這些節點只能做為處理節點。因此,您可以使用次要工作站擴充運算資源,而不必擴充儲存空間。
不得只使用次要工作站的叢集:叢集必須有主要工作站。如果您建立叢集時未指定主要工作站數量,Dataproc 會在叢集中新增兩個主要工作站。
機器類型:根據預設,次要工作站會使用叢集主要工作站的機器類型。舉例來說,如果您建立的叢集主要工作站使用
n1-standard-4
機器類型,則預設情況下,新增至叢集的所有次要工作站也會使用n1-standard-4
機器。您可以為次要工作站指定一或多個機器類型排名清單,而不使用次要工作站的預設主要工作站機器類型。詳情請參閱 Dataproc 彈性 VM。
永久磁碟大小:根據預設,次要工作站的建立大小為 1000 GB 或主要工作站開機磁碟大小,取兩者中較小的值。這個磁碟空間用於本機快取資料,無法透過 HDFS 存取。 您可以在建立叢集時,使用
gcloud dataproc clusters create --secondary-worker-boot-disk-size
指令覆寫預設磁碟大小。即使叢集在建立時沒有次要工作站,您也可以指定這個旗標。非同步建立:透過建立或擴充叢集新增次要工作站時,建立或更新作業完成時,可能無法佈建次要工作站。這是因為 Dataproc 會使用代管執行個體群組 (MIG) 管理次要工作站,只要可以佈建 VM,就會非同步建立 VM (請參閱「檢查代管執行個體的狀態」)。
先占和非先占次要工作站
次要工作站有三種:Spot VM、標準先占 VM 和非先占 VM。Dataproc 次要工作站的預設類型為標準先占 VM。您可以指定混合使用 Spot 和非先占次要工作站。
舉例來說,如果您在建立叢集時選取三個次要工作站,可以指定三個 Spot VM、三個先占 VM、三個非先占 VM,或混合使用 Spot 和非先占工作站。
先占工作站
雖然先占工作站可能遭到移除,進而影響作業穩定性,但您或許仍會決定使用先占執行個體,以降低一般資料處理作業的每小時運算成本,或以較低的總成本建立非常龐大的叢集 (您可以使用 Google Cloud 價格計算機估算成本)。
為獲得最佳結果,叢集中的先佔工作站數量應少於叢集內所有工作站總數 (主要工作站加上所有次要工作站) 的 50%。
使用先占工作站時,與在非先占工作站上執行的工作相比,工作最有可能會發生更多暫時性的單一工作站工作失敗。如要提高工作對低階工作失敗的容錯能力,您可以設定類似自動調度資源叢集使用的預設屬性值的叢集屬性值,以增加工作重試次數上限,並避免工作失敗。
節省成本的考量:使用先占 VM 不一定能節省成本,因為先占 VM 可能會導致工作執行時間變長,進而提高工作成本。雖然搭配先占 VM 使用增強彈性模式 (EFM) 有助於減輕這種結果,但先占 VM 的整體成本節省幅度會因使用案例而異。一般來說,短期工作較適合使用先占 VM,因為工作執行期間遭搶占的機率較低。嘗試不同的工作選項,例如不使用先占 VM,以及使用 EFM 的先占 VM,估算成本並找出最佳解決方案。
非先占工作站
- 您可以建立叢集,並使用非先占次要工作站來擴充運算資源,同時確保工作穩定性。如要這麼做,請將
non-preemptible
指定為次要工作人員類型。您可以混合使用非先占和現貨次要工作站。
選取次要工作站
使用 Google Cloud 主控台、gcloud CLI 或 Dataproc API 建立叢集時,可以指定次要工作站的數量和類型。
- 您可以將 Spot 執行個體與非先占次要工作站混合使用。
- 叢集建立後,您可以更新叢集,變更叢集中次要工作站的數量,但無法變更類型。
- 標籤更新會在 24 小時內傳播至所有先占次要工作站。標籤更新不會傳播至現有的非先占次要工作站。標籤更新會傳播至叢集中之後新增的所有工作站。舉例來說,如果擴大叢集,所有新的主要和次要工作站都會有新的標籤。
控制台
從 Google Cloud 控制台建立 Dataproc 叢集時,可以指定次要工作站的數量。叢集建立完成後,您可以透過Google Cloud 控制台編輯叢集設定,新增及移除次要工作站。
建立具有次要工作站的叢集
您可以在 Google Cloud console 的 Dataproc「建立叢集」頁面,透過「次要工作站節點」部分,設定要套用至新叢集的次要工作站數量和類型。分別在「次要工作站節點」和「先占性」欄位中,指定次要工作站的數量和類型。
更新具有次要執行個體的叢集
如要更新叢集中的次要工作站數量,請在 Google Cloud 控制台的「Clusters」(叢集) 頁面中,按一下叢集名稱。在「叢集詳細資料」頁面中。按一下「Configuration」(設定) 分頁標籤,然後按一下「Edit」(編輯),並更新「Secondary worker nodes」(次要工作節點) 欄位中的數字。
從叢集中移除所有次要執行個體
如要從叢集中移除所有次要工作站,請按照先前的說明更新叢集設定,並在「次要工作站節點」欄位中指定 0
。
Google Cloud CLI 指令
建立叢集時,請使用 gcloud dataproc clusters create
指令將次要工作站新增至叢集。建立叢集後,您可以使用 gcloud dataproc clusters update
指令,在叢集中新增或移除次要工作站 (可以更新次要工作站的數量,但無法更新類型)。
建立具有次要工作站的叢集
如要建立含有次要工作站的叢集,請使用 gcloud dataproc clusters create
指令搭配 --num-secondary-workers
引數。根據預設,次要工作站是標準先占 VM。建立叢集時,您可以將 --secondary-worker-type
標記設為 `non-preemptible` 或 `spot`,指定非先占或 Spot 次要工作站。下列範例說明如何使用各次要工作站類型建立叢集:`preemptible` (預設)、Spot (先占) 和非先占。您可以使用其他標記,將 Spot 執行個體與不可搶占的次要工作站混合使用。
下列指令會建立「cluster1」,並包含兩個標準先占 (預設類型) 次要工作站。
gcloud dataproc clusters create cluster1 \ --num-secondary-workers=2 \ --region=us-central1
下列指令會使用 secondary-worker-type
標記建立「cluster2」,並包含兩個 Spot (可搶占) 次要工作站。
gcloud dataproc clusters create cluster2 \ --num-secondary-workers=2 \ --secondary-worker-type=spot \ --region=us-central1
範例 3
下列指令會使用 secondary-worker-type
旗標建立「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「建立叢集」頁面左側面板底部,按一下「對等 REST 或指令列」連結,讓 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
從叢集中移除所有次要工作人員
如要從叢集中移除所有次要工作站,請使用 gcloud dataproc clusters update
指令,並將 --num-secondary-workers
設為 0
。
下列指令會從「example-cluster」移除所有次要工作站。
gcloud dataproc clusters update example-cluster \ --num-secondary-workers=0 \ --region=us-central1
REST API
建立具有次要工作站的叢集
使用 Dataproc clusters.create API 在建立叢集時,將次要工作站新增至叢集。下列範例說明如何使用各次要工作站類型建立叢集:preemptible
(預設)、spot
(可搶占) 和 non-preemptible
。您可以使用其他欄位混合使用 Spot 執行個體和非搶占型次要工作站。
下列 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 要求會建立「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 記錄不會回報建立次要工作站失敗,但失敗的工作站會列在Google Cloud 控制台的「叢集詳細資料」頁面「VM 執行個體」分頁下方,且沒有綠色勾號。如要查看清單,請開啟 Dataproc「Clusters」(叢集) 頁面,然後按一下叢集名稱,開啟叢集的「Cluster details」(叢集詳細資料) 頁面。
代管執行個體群組權限問題:如要檢查代管執行個體群組權限是否有問題,請按照下列步驟操作:
- 找出代管執行個體群組的名稱 (
instanceGroupManagerName
)。控制台
- 開啟 Dataproc 叢集頁面,然後按一下叢集名稱,開啟叢集的「叢集詳細資料」頁面。
- 按一下頁面底部的「Equivalent 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
的值。 - 在記錄檔探索工具中查看記錄。
選取
Google Compute Engine Instance Group
資源類型,並依代管執行個體群組名稱篩選。或者,您也可以套用記錄篩選器,以找出 `resource.type="gce_instance_group" 和
resource.labels.instance_group_name=INSTANCE_GROUP_MANAGER_NAME
。
- 找出代管執行個體群組的名稱 (
將 Spot 與非先占次要工作站混合使用
建立 Dataproc 叢集時,您可以指定現成和非先占次要工作站的組合。
次要工作站設定,可將 Spot 與非先占次要工作站混合使用
建立 Dataproc 叢集時,請使用下列次要工作站設定,取得最低的次要工作站容量,並在 Spot VM 可用時增加容量:
次要工作站數量:要佈建的次要工作站總數。
次要工作站類型:混合使用 Spot 和非先占次要工作站時,
spot
是次要工作站類型。standardCapacityBase:要佈建的非先占 (標準) 次要工作站數量。系統會先佈建非先占型次要工作站,再佈建其他類型的次要工作站。
standardCapacityPercentAboveBase:填入
standardCapacityBase
次要工作站數量後,為達到要求的次要工作站總數,剩餘的次要工作站會以非先占和 Spot 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 執行個體與不可搶占的次要工作站混合使用。
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。 專案 ID 會列在 Google Cloud 控制台資訊主頁的「專案資訊」部分。
- 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 和非搶占式次要工作者,請在 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 和非先占次要工作站時,請指定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
次要工作站混合特性
本節說明混合使用 Spot 工作站和不可搶占的次要工作站時,會出現的行為和特性。
次要工作站偏好設定
在次要工作站上排定應用程式時,Dataproc 不會優先使用 Spot VM 或非先占 VM。
次要工作站資源調度
透過自動調度資源或手動調度資源擴充次要工作站時,Dataproc 會在新增次要工作站時,維持要求的現成與非先占比例。
正在更新次要工作站組合設定
建立 Dataproc 叢集時,您可以指定先占和非先占次要工作站的組合。叢集建立後,您就無法變更次要工作站組合設定。
發現次要工作站遭到搶占
- Dataproc 不會控管 Spot VM 的先占時間 (請參閱「先占 Spot VM」)。
- 發生 Spot VM 先占時,次要工作站群組可暫時以較低的容量執行,直到 Compute Engine 重新佈建遭先占的 VM 為止。
- Dataproc 不會為次要工作站群組新增超出群組初始設定的容量。