Dataproc 次要工作站

除了使用標準 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,以便估算成本並找出最佳解決方案。

非先占工作站

選取次要工作站

您可以使用 Google Cloud 主控台、gcloud CLIDataproc 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 混合

範例 1

下列指令會建立「cluster1」,其中包含兩個標準先占 (預設類型) 的次要工作站。

gcloud dataproc clusters create cluster1 \
    --num-secondary-workers=2 \
    --region=us-central1
範例 2

下列指令使用 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
變更次要工作站開機磁碟大小。根據預設,所有次要工作站都會以 1000 GB 或主要工作站開機磁碟空間中較小的值建立。這個磁碟空間用於本機資料快取,無法透過 HDFS 使用。您可以在建立叢集時,使用 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。您可以使用其他欄位將點與不可搶占的次要工作站混合

範例 1

下列 POST 要求會建立「cluster1」,其中包含兩個標準先占 (預設類型) VM 工作站。


POST https://dataproc.googleapis.com/v1/projects/project-id/regions/region/clusters

{
  "clusterName": "cluster1",
  "config": {
    "secondaryWorkerConfig": {
      "numInstances": 2
    }
  }
}
範例 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
    }
  }
}
讓 Google Cloud 控制台建構叢集建立要求。 您可以在 Dataproc「Create a cluster」頁面的左側面板底部,點選「Equivalent REST or command line」連結,讓 Google Cloud 主控台建構對等 API REST 要求或 gcloud CLI 指令。

排解次要工作站問題

  • 服務帳戶權限問題:透過代管執行個體群組建立次要工作者。如果發生權限問題,Dataproc 記錄不會回報無法建立次要 worker 的情況,但在Google Cloud 控制台的「叢集詳細資料」頁面中,會在「VM 執行個體」分頁下列出沒有綠色勾號的 worker。如要查看清單,請開啟 Dataproc「叢集頁面,然後按一下叢集名稱,開啟該叢集的「叢集詳細資料」頁面。

  • 代管執行個體群組權限問題:如要檢查代管執行個體群組權限是否有問題,請按照下列步驟操作:

    1. 找出代管執行個體群組 (instanceGroupManagerName) 的名稱。

      控制台

      1. 開啟 Dataproc「叢集頁面,然後按一下叢集名稱,即可開啟叢集的「叢集詳細資料」頁面。
      2. 按一下頁面底部的「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 的值。
    2. 記錄檔探索工具中查看記錄檔。
    • 選取 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:5
  • standardCapacityPercentAboveBase 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

注意:

API

如要將 Spot 與非搶先權的次要 worker 混合,請將 Dataproc preemptibilitystandardCapacityBasestandardCapacityPercentAboveBase 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
        }
      }
    }
  }
}

注意:

結合次要工作站混合與彈性 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 不會在次要工作站群組中新增超過群組初始設定的容量。