為了避免閒置的叢集產生Google Cloud 費用,請在建立叢集時使用 Dataproc 排定刪除叢集功能。此功能提供選項,可在發生下列事件時刪除叢集:
- 在指定的叢集閒置期間之後
- 在指定的未來時間點
- 自提交叢集建立要求起的指定期間之後
會停用排定刪除作業的動作
叢集執行期間,下列動作會停用排定刪除作業,直到停用動作還原為止:
- 移除 Dataproc 服務代理程式服務帳戶的 IAM Dataproc 服務代理程式角色
- 在叢集專案中停用 Dataproc API
- 在排定刪除的叢集 VM 上啟用 Compute Engine VM 刪除保護機制
- 如果 Dataproc 服務代理人服務帳戶 (控制層身分) 不在範圍邊界內,請啟用 VPC Service Controls
計算叢集閒置時間
您可以排定刪除作業,在叢集閒置一段時間後刪除叢集。叢集建立並完成叢集佈建後,系統就會開始計算閒置時間。叢集沒有執行中的工作時,系統就會開始計算閒置時間。
dataproc:dataproc.cluster-ttl.consider-yarn-activity
叢集屬性
會影響叢集閒置時間的計算方式,如下所示:
- 這項屬性預設為啟用 (設為
true
)。 - 啟用這項屬性後,系統必須處於 YARN 和 Dataproc Jobs API 活動閒置狀態,才會開始計算叢集閒置時間,並持續累加。
- YARN 活動包括待處理和執行的 YARN 應用程式。
- Dataproc Jobs API 活動包括提交至 Dataproc Jobs API 的待處理和執行中作業。
- 如果將這項屬性設為
false
,系統就會開始計算叢集閒置時間,且只有在 Dataproc Jobs API 活動閒置時才會繼續計算。
dataproc:dataproc.cluster-ttl.consider-yarn-activity
屬性適用於以 1.4.64
、1.5.39
、2.0.13
和後續版本建立的叢集。如果是使用舊版映像檔建立的叢集,系統只會將 Dataproc Jobs API 活動納入叢集閒置時間的計算。
使用排定刪除叢集功能
使用 Google Cloud CLI、Dataproc API 或 Google Cloud 主控台建立叢集時,可以設定排定刪除值。建立叢集後,您可以更新叢集,變更或刪除先前在叢集上設定的排定刪除值。
gcloud CLI
如要建立或更新叢集的排定刪除值,請將下表列出的旗標和值傳遞至 gcloud dataproc clusters create
或 gcloud dataproc clusters update
指令。
gcloud CLI 旗標 | 說明 | 價值精細程度 | 最小值 | 最大值 |
---|---|---|---|---|
--delete-max-idle 1 |
適用於叢集建立和叢集更新指令。
自叢集建立或更新後進入閒置狀態,且處於可供使用狀態起,到叢集開始刪除為止的持續時間。以 IntegerUnit 格式提供持續時間,單位可以是「s、m、h、d」(分別表示秒、分鐘、小時、天)。範例:「30m」:叢集進入閒置狀態後 30 分鐘。 |
1 秒 | 5 分鐘 | 14 天 |
--no-delete-max-idle |
僅適用於叢集更新指令。
取消先前 delete-max-idle 標記設定的叢集刪除作業。 |
不適用 | 不適用 | 不適用 |
--delete-expiration-time 2 |
適用於叢集建立和叢集更新指令。 開始刪除叢集的時間,使用 ISO 8601 日期時間格式。如要以正確格式產生日期時間,請使用時間戳記產生器。例如,「2017-08-22T13:31:48-08:00」指定到期時間為 UTC -8:00 時區 13:21:48。 | 1 秒 | 自現在時間起 10 分鐘 | 自現在時間起 14 天 |
--delete-max-age 2 |
適用於叢集建立和叢集更新指令。
自提交叢集建立要求起,到叢集開始刪除為止的持續時間。以 IntegerUnit 格式提供持續時間,單位可以是「s、m、h、d」(分別表示秒、分鐘、小時、天)。範例:「30m」:自現在起 30 分鐘;
「1d」:自現在起 1 天。 |
1 秒 | 10 分鐘 | 14 天 |
--no-delete-max-age |
僅適用於叢集更新指令。
取消之前透過 delete-max-age 或 delete-expiration-time 標記設定的叢集自動刪除作業。 |
不適用 | 不適用 | 不適用 |
- 您可以在叢集建立或更新要求中,透過
delete-expiration-time
或delete-max-age
標記傳遞delete-max-idle
標記。若第一個標記值成真則會刪除叢集。 - 您可以將 c
delete-expiration-time
標記或delete-max-age
標記傳送至叢集建立或更新指令,但不能同時傳送兩個標記。
叢集建立範例:
gcloud dataproc clusters create CLUSTER_NAME \ --region=REGION \ --delete-max-idle=DURATION \ --delete-expiration-time=TIME \ ... other flags ...
叢集更新範例:
gcloud dataproc clusters update CLUSTER_NAME \ --region=REGION \ --delete-max-idle=DURATION \ --no-delete-max-age \ ... other flags
REST API
如要建立或更新叢集的排定刪除值,請在 Dataproc API ClusterLifecycleConfig 欄位中設定下表列出的值,做為 Dataproc cluster.create 或 cluster.patch API 要求的一部分。
API 欄位 | 說明 | 價值精細程度 | 最小值 | 最大值 |
---|---|---|---|---|
idleDeleteTtl 1 |
適用於叢集建立和叢集更新指令。
自叢集建立或更新後進入閒置狀態,且處於可供使用狀態起,到叢集開始刪除為止的持續時間。使用新值更新叢集時,新值必須大於先前設定的值。提供以秒為單位的持續時間,最多可以有 9 個小數位數,以「s」結尾。例如:「3.5s」。
提交空白持續時間,即可取消先前設定的 idleDeleteTtl 值。 |
1 秒 | 5 分鐘 | 14 天 |
autoDeleteTime 2 |
適用於叢集建立和叢集更新指令。
開始刪除叢集的時間。使用新時間更新叢集時,新時間必須晚於先前設定的時間。更新時,如果為 autoDeleteTime 設定空白值,系統會取消現有的自動刪除設定。提供採用 RFC 3339 UTC Zulu 格式的時間戳記,精確度可達奈秒。例如:「2014-10-02T15:01:23.045123456Z」。 |
1 秒 | 自現在時間起 10 分鐘 | 自現在時間起 14 天 |
autoDeleteTtl 2 |
自提交叢集建立或更新要求起,到叢集開始刪除為止的持續時間。更新叢集時,新的排定刪除時間 (更新要求時間加上新的持續時間) 必須晚於先前設定的叢集刪除時間。提交空白值,取消先前設定的 autoDeleteTtl 值。
提供以秒為單位的持續時間,最多可以有 9 個小數位數,以「s」結尾。
例如:「3.5s」。 |
1 秒 | 10 分鐘 | 14 天 |
- 您可以在叢集建立或更新要求中,設定或更新
idleDeleteTtl
和autoDeleteTime
或autoDeleteTtl
。若第一個標記值成真則會刪除叢集。 - 您可以在要求中設定或更新
autoDeleteTime
或autoDeleteTtl
,但不能同時設定或更新兩者。
控制台
- 開啟 Dataproc 的「建立叢集」頁面。
- 選取「Customize cluster」(自訂叢集) 面板。
- 在「排程刪除」部分,選取要套用至叢集的選項。
查看排定刪除叢集設定
gcloud CLI
您可以使用 gcloud dataproc clusters list
指令,確認叢集是否已啟用排程刪除功能。
gcloud dataproc clusters list \ --region=REGION
... NAME WORKER_COUNT ... SCHEDULED_DELETE CLUSTER_ID NUMBER ... enabled ...
您可以使用 gcloud dataproc clusters describe
指令檢查叢集的排定刪除設定。LifecycleConfig
gcloud dataproc clusters describe CLUSTER_NAME \ --region=REGION
... lifecycleConfig: autoDeleteTime: '2018-11-28T19:33:48.146Z' idleDeleteTtl: 1800s idleStartTime: '2018-11-28T18:33:48.146Z' ...
autoDeleteTime
和 idleDeleteTtl
是叢集上設定的排定刪除設定值。Dataproc 會產生 idleStartTime
值,這是叢集最近一次進入閒置狀態的時間。如果叢集在 idleStartTime
+ idleDeleteTtl
仍處於閒置狀態,Dataproc 就會刪除叢集。
REST API
您可以提出 clusters.list 要求,確認叢集是否已啟用排定刪除功能。