調整 Dataproc 叢集

建立 Dataproc 叢集後,您可藉由增加或減少叢集中主要或次要工作站節點數的方式 (水平擴展),調整叢集 (為叢集進行資源調度)。您隨時都能為 Dataproc 叢集進行資源調度,即使叢集上有正在執行的工作也沒問題。您無法變更現有叢集的機器類型 (垂直擴充)。如要垂直擴充,請使用支援的機器類型建立叢集,然後將工作遷移至新叢集。

您可以為下列項目調度 Dataproc 叢集:

  1. 增加工作站數量,以提升工作執行速度。
  2. 減少工作站數量,以節省成本 (請參閱安全停用一節,讓您在縮減叢集規模時,能將該功能列為避免失去進行中工作的選項)。
  3. 增加節點數量,以擴充可用的 Hadoop 分散式檔案系統 (HDFS) 儲存空間。

您可以為叢集進行多次資源調度,因此您可能這次想要擴充/縮減叢集的規模,下次又想要縮減/擴充叢集的規模。

使用縮放功能

能為 Dataproc 叢集進行資源調度的方式有三種:

  1. 使用 gcloud CLI 中的 gcloud 指令列工具。
  2. Google Cloud 控制台中編輯叢集設定。
  3. 使用 REST API

新增至叢集的工作站將會使用與現有工作站相同的機器類型。舉例來說,如果叢集中的工作站是使用 n1-standard-8 機器類型建立的,那麼新的工作站也會使用 n1-standard-8 機器類型。

您可以調整主要工作站及/或次要 (先佔) 工作站的數量。舉例來說,如果您只調整了先佔工作站的數量,主要工作站的數量會維持不變。

gcloud

如要使用 gcloud dataproc clusters update 調整叢集大小,請執行下列指令:
gcloud dataproc clusters update cluster-name \
    --region=region \
    [--num-workers and/or --num-secondary-workers]=new-number-of-workers
其中 cluster-name 是要更新的叢集名稱,new-number-of-workers 則是主要和/或次要工作站節點的更新數量。 舉例來說,如要替名為「dataproc-1」的叢集調度資源,讓它使用五個主要工作站節點,請執行以下指令。
gcloud dataproc clusters update dataproc-1 \
    --region=region \
    --num-workers=5
...
Waiting on operation [operations/projects/project-id/operations/...].
Waiting for cluster update operation...done.
Updated [https://dataproc.googleapis.com/...].
clusterName: my-test-cluster
...
  masterDiskConfiguration:
    bootDiskSizeGb: 500
  masterName: dataproc-1-m
  numWorkers: 5
  ...
  workers:
  - my-test-cluster-w-0
  - my-test-cluster-w-1
  - my-test-cluster-w-2
  - my-test-cluster-w-3
  - my-test-cluster-w-4
...

REST API

請參閱 clusters.patch 的說明。

示例

PATCH /v1/projects/project-id/regions/us-central1/clusters/example-cluster?updateMask=config.worker_config.num_instances,config.secondary_worker_config.num_instances
{
  "config": {
    "workerConfig": {
      "numInstances": 4
    },
    "secondaryWorkerConfig": {
      "numInstances": 2
    }
  },
  "labels": null
}

控制台

建立叢集後,您可以為叢集進行資源調度,方法是前往 Google Cloud 控制台的「Clusters」(叢集) 頁面,然後開啟該叢集的「Cluster details」(叢集詳細資料) 頁面,再按一下「Configuration」(設定) 分頁上的「Edit」(編輯) 按鈕。 為「Worker nodes」(工作站節點) 和/或「Preemptible worker nodes」(先佔工作站節點) 數量輸入新的值 (在下方的螢幕截圖中,數量分別更新為「5」和「2」)。 按一下「儲存」,更新叢集。

Dataproc 如何選取要移除的叢集節點

如果叢集是使用映像檔版本 1.5.83+2.0.57+2.1.5+建立,當縮減叢集時,Dataproc 會先移除閒置、不健全和閒置的節點,然後移除執行最少 YARN 應用程式主機和執行中容器的節點,盡量減少節點移除作業對執行中 YARN 應用程式的影響。

安全停用

當您縮減叢集資源時,正在進行的工作可能會在完成之前停止。如果您使用的是 Dataproc 1.2 或更新的版本,可以使用包含 YARN 節點安全停用的安全停用功能,完成工作站上執行中的工作,避免讓 Cloud Dataproc 叢集中的這些工作遭到移除。

安全停用與次要工作站

先佔 (次要) 工作站群組會持續佈建或刪除工作站,以達到其預期的規模,即使為叢集調度資源的作業標示為已完成。如果您嘗試安全停用次要工作站,將會收到類似以下的錯誤訊息:

「Secondary worker group cannot be modified outside of Dataproc. 如果您最近才建立或更新這個叢集,請稍候幾分鐘再正常停用,讓所有次要執行個體加入或離開叢集。預期的次要工作站群組大小:x;實際大小:y

請稍候幾分鐘,然後再重複安全停用要求。

使用安全停用程序

Dataproc 安全停用內含的 YARN 節點安全停用功能可完成工作站上正在進行的工作,以免這些工作從 Cloud Dataproc 叢集移除。安全停用功能預設為停用。如要啟用此功能,請在更新叢集時設定一個逾時值,以從叢集移除一或多個工作站。

gcloud

當您更新叢集來移除一或多個工作站時,請使用 gcloud dataproc clusters update 指令並搭配 --graceful-decommission-timeout 標記。逾時 (字串) 值可以是「0s」(預設值;強制非安全停用) 或相對於目前時間的正時間值 (例如「3s」)。 最大時間值是 1 天。
gcloud dataproc clusters update cluster-name \
    --region=region \
    --graceful-decommission-timeout="timeout-value" \
    [--num-workers and/or --num-secondary-workers]=decreased-number-of-workers \
    ... other args ...

REST API

請參閱 clusters.patch.gracefulDecommissionTimeout 的說明。逾時 (字串) 值可以是「0」(預設值;強制非安全停用) 或單位為秒的時間值 (例如「3s」)。最大時間值是 1 天。

控制台

建立叢集後,您可以選取叢集的安全停用功能,方法是前往 Google Cloud 主控台的「Clusters」(叢集) 頁面,然後開啟該叢集的「Cluster details」(叢集詳細資料) 頁面,再按一下「Configuration」(設定) 分頁上的「Edit」(編輯) 按鈕。 在「Graceful Decommissioning」(安全停用) 部分,選取「Use graceful decommissioning」(使用安全停用),然後選取逾時值。 按一下「儲存」,更新叢集。

取消安全停用縮減作業

在以映像檔版本 2.0.57+2.1.5+建立的 Dataproc 叢集上,您可以執行 gcloud dataproc operations cancel 指令,或發出 Dataproc API operations.cancel 要求,取消正常終止縮減作業。

取消安全停用縮減作業時:

  • 作業取消完成後,DECOMMISSIONING 狀態的工作站會重新委派,並變成 ACTIVE

  • 如果縮減作業包含標籤更新,更新可能不會生效。

如要驗證取消要求狀態,可以執行 gcloud dataproc operations describe 指令,或發出 Dataproc API operations.get 要求。如果取消作業成功,內部作業狀態會標示為 CANCELLED