除了使用標準 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,以及使用先占 VM 和 EFM,估算成本並找出最佳解決方案。
非先占工作站
- 您可以建立叢集,並使用非先占次要工作站來擴充運算資源,同時確保工作穩定性。如要這麼做,請將
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: 5standardCapacityPercentAboveBase30%
結果:
- 不可搶占: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 不會為次要工作站群組新增超出群組初始設定的容量。