Dataproc 次要工作站

除了使用標準 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 CLIDataproc 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 執行個體與不可搶占的次要工作站混合使用

範例 1

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

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

下列指令會使用 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
變更次要工作站開機磁碟大小。 根據預設,所有次要工作站建立時配置的開機磁碟空間較小,為 1000 GB 或主要工作站開機磁碟大小,取其較小者。這個磁碟空間用於本機快取資料,無法透過 HDFS 存取。您可以在建立叢集時,使用 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 執行個體和非搶占型次要工作站

範例 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 要求會建立「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「建立叢集」頁面左側面板底部,按一下「對等 REST 或指令列」連結,讓 Google Cloud 主控台建構對等的 API REST 要求或 gcloud CLI 指令。

排解次要工作站問題

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

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

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

      控制台

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

注意:

API

如要混合使用 Spot 和非搶占式次要工作者,請在 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
        }
      }
    }
  }
}

注意:

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