Dataproc 次要 worker

除了使用標準 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 CLIDataproc 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

範例 1

下列指令會建立「cluster1」,並加入兩個標準先占 (預設類型) 次要 worker。

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

下列指令會使用 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
變更次要 worker 開機磁碟大小。 根據預設,所有次要 worker 會以 1000 GB 或主要 worker 開機磁碟大小的較小值建立。這個磁碟空間用於本機快取資料,無法透過 HDFS 存取。您可以在建立叢集時,使用 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

範例 1

下列 POST 要求會建立「cluster1」,並加入兩個標準先占 (預設類型) VM worker。


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

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

解決次要 worker 問題

  • 服務帳戶權限問題:次要 worker 是透過代管執行個體群組建立。 如果發生權限問題,Dataproc 記錄不會回報建立次要 worker 失敗,但失敗的 worker 會列在Google Cloud 控制台「Cluster details」(叢集詳細資料) 頁面的「VM Instances」(VM 執行個體) 分頁中,且不會加上綠色勾號。如要查看清單,請開啟 Dataproc「Clusters」(叢集) 頁面,然後按一下叢集名稱,開啟該叢集的「Cluster details」(叢集詳細資料) 頁面。

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

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

      控制台

      1. 開啟 Dataproc「Clusters」(叢集) 頁面,然後按一下叢集名稱,開啟該叢集的「Cluster details」(叢集詳細資料) 頁面。
      2. 按一下頁面底部的「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 的值。
    2. 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:5
  • standardCapacityPercentAboveBase 30%

結果:

  • 非先占: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

注意:

API

如要搭配使用 Spot 與非先占次要 worker員,請在 cluster.create 要求中,設定 Dataproc preemptibilitystandardCapacityBasestandardCapacityPercentAboveBase API 欄位,如下列 JSON 範例所示:

{
  "clusterName": "CLUSTER_NAME",
  "config": {
    "secondaryWorkerConfig": {
      "numInstances": 15,
      "preemptibility": "spot",
      "instanceFlexibilityPolicy": {
        "provisioningModelMix": {
          "standardCapacityBase": STANDARD_CAPACITY_BASE
          "standardCapacityPercentAboveBase": STANDARD_CAPACITY_PERCENT_ABOVE_BASE
        }
      }
    }
  }
}

注意:

結合次要 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 群組新增超出群組初始設定的容量。