本文說明常見的叢集建立錯誤訊息,並提供排解叢集建立問題的提示。
常見的叢集建立錯誤訊息
使用者未獲授權,無法以服務帳戶的身分操作
原因:嘗試建立 Managed Service for Apache Spark 叢集的主體,不具備使用指定服務帳戶的必要權限。Managed Service for Apache Spark 使用者必須具備服務帳戶
ActAs權限,才能部署 Managed Service for Apache Spark 資源; 服務帳戶使用者角色 (roles/iam.serviceAccountUser) 包含這項權限 (請參閱「Managed Service for Apache Spark 角色」)。解決方案:找出嘗試建立 Managed Service for Apache Spark 叢集的使用者或服務帳戶。將叢集設定使用的服務帳戶 (通常是 Managed Service for Apache Spark VM 服務帳戶) 的服務帳戶使用者角色 (
roles/iam.serviceAccountUser) 授予該主體。作業逾時:至少須有 2 個 datanode/Node Manager 執行,但目前只有 0 個。
原因:控制器節點無法與 worker 節點通訊,因此無法建立叢集。
解決方法:
- 查看防火牆規則警告。
- 請確認已設置正確的防火牆規則。詳情請參閱「預設 Managed Service for Apache Spark 防火牆規則總覽」。
- 在 Google Cloud 控制台中執行Connectivity Tests,判斷是什麼原因導致控制器和 worker 節點之間的通訊受阻。
projects/{projectId}/regions/{region}/subnetworks/{subnetwork}所需的compute.subnetworks.use權限原因:如果您嘗試使用其他專案中的虛擬私有雲網路,設定 Managed Service for Apache Spark 叢集,但 Managed Service for Apache Spark 服務代理服務帳戶,對託管網路的 Shared VPC 專案不具備必要權限,就可能發生這項錯誤。
解決方案:請按照「建立叢集使用其他專案的虛擬私有雲網路」一文中的步驟操作。
可用區
projects/zones/{zone}的資源不足,無法執行要求(resource type:compute)原因:用於建立叢集的可用區資源不足。
解決方法:
- 使用 Managed Service for Apache Spark 的自動選擇可用區位置功能,在區域中任何有可用資源的可用區建立叢集。
- 在其他可用區建立叢集。
「超過配額」錯誤
CPUS/CPUS_ALL_REGIONS 配額不足
「DISKS_TOTAL_GB」配額不足
「IN_USE_ADDRESSES」配額不足解決方法:透過 Google Cloud 控制台要求增加配額。
初始化動作失敗
原因:建立叢集時提供的初始化動作無法安裝。
解決方法:
- 請參閱初始化動作注意事項和指南。
- 查看輸出記錄。錯誤訊息應提供 Cloud Storage 記錄的連結。
無法初始化節點
CLUSTER-NAME-m。... 輸出內容請見:<gs://PATH_TO_STARTUP_SCRIPT_OUTPUT>原因:Managed Service for Apache Spark 叢集控制器節點無法初始化。
解決方法:
- 查看錯誤訊息 (
gs://PATH_TO_STARTUP_SCRIPT_OUTPUT) 中列出的開機指令碼輸出記錄,確認節點初始化失敗的原因。 - 可能原因包括 Managed Service for Apache Spark 叢集網路設定問題,以及 Python 套件依附元件安裝失敗。
- 如果查看開機指令碼記錄、修正所有使用者端問題,並以指數輪詢重試後,問題仍未解決,請與 Google Cloud 支援團隊聯絡。
- 查看錯誤訊息 (
無法建立叢集:IP 位址空間已用盡
原因:無法使用佈建所要求叢集節點所需的 IP 位址空間。
解決方法:
- 建立 worker 節點較少,但機型較大的叢集。
- 在其他子網路或網路上建立叢集。
- 減少網路用量,釋出 IP 位址空間。
- 請等待網路有足夠的 IP 空間。
初始化指令碼錯誤訊息:存放區 REPO_NAME 已無版本檔案
原因:Debian oldstable backports 存放區已清除。
解決方法:
在初始化指令碼中,於執行
apt-get的程式碼之前,加入下列程式碼。oldstable=$(curl -s https://deb.debian.org/debian/dists/oldstable/Release | awk '/^Codename/ {print $2}'); stable=$(curl -s https://deb.debian.org/debian/dists/stable/Release | awk '/^Codename/ {print $2}'); matched_files="$(grep -rsil '\-backports' /etc/apt/sources.list*)" if [[ -n "$matched_files" ]]; then for filename in "$matched_files"; do grep -e "$oldstable-backports" -e "$stable-backports" "$filename" || \ sed -i -e 's/^.*-backports.*$//' "$filename" done fiTimeout waiting for instance
DATAPROC_CLUSTER_VM_NAMEto report in 或 Network is unreachable:dataproccontrol-REGION.googleapis.com原因:這些錯誤訊息表示 Managed Service for Apache Spark 叢集的網路設定不完整:可能缺少預設網際網路閘道的路由或防火牆規則。
解決方法:
如要排解這個問題,您可以建立下列連線能力測試:
- 在兩個 Managed Service for Apache Spark 叢集 VM 之間建立連線能力測試。這項測試的結果可協助您瞭解,網路的輸入或輸出允許防火牆規則是否正確套用至叢集 VM。
- 在 Managed Service for Apache Spark 叢集 VM 和目前的 Managed Service for Apache Spark 控制 API IP 位址之間建立 Connectivity Tests。如要取得目前的 Managed Service for Apache Spark 控制 API IP 位址,請使用下列指令:
dig dataproccontrol-REGION.googleapis.com A
使用輸出內容答案部分中的任何 IPv4 位址。
Connectivity Tests 的結果可協助您瞭解,預設網際網路閘道的路由和輸出允許防火牆是否設定正確。
根據 Connectivity Tests 的結果:
因更新而發生錯誤
原因:叢集接受了提交至 Managed Service for Apache Spark 服務的工作,但無法手動或透過自動調度資源功能向上或向下擴充。非標準叢集設定也可能導致這項錯誤。
解決方法:
叢集疑難排解提示
本節提供其他指南,說明如何排解常見問題,避免無法建立 Managed Service for Apache Spark 叢集。
Managed Service for Apache Spark 叢集佈建失敗時,通常會產生一般錯誤訊息,或在失敗前回報 PENDING 或 PROVISIONING 狀態。診斷及解決叢集故障問題的關鍵,在於檢查叢集記錄並評估常見故障點。
常見症狀
以下是叢集建立失敗的常見症狀:
- 叢集狀態長時間維持在
PENDING或PROVISIONING。 - 叢集會轉換為
ERROR狀態。 - 建立叢集時發生一般 API 錯誤,例如
Operation timed out。 記錄或 API 回應錯誤訊息,例如:
RESOURCE_EXHAUSTED:與 CPU、磁碟或 IP 位址配額有關Instance failed to startPermission deniedUnable to connect to service_name.googleapis.com或Could not reach required Google APIsConnection refused或network unreachable- 與初始化動作失敗相關的錯誤,例如指令碼執行錯誤和找不到檔案。
查看叢集記錄
診斷叢集建立失敗時,重要的第一步是查看 Cloud Logging 中提供的詳細叢集記錄。
- 前往記錄檔探索工具:在 Google Cloud 控制台中開啟「Logs Explorer」。
- 篩選 Managed Service for Apache Spark 叢集:
- 在「Resource」(資源) 下拉式選單中,選取「
Cloud Managed Service for Apache Spark Cluster」。 - 輸入
cluster_name和project_id。您也可以依location(區域) 篩選。
- 在「Resource」(資源) 下拉式選單中,選取「
- 查看記錄項目:
- 找出叢集建立失敗前後出現的
ERROR或WARNING級訊息。 - 請留意
master-startup、worker-startup和agent元件的記錄,深入瞭解 VM 層級或 Managed Service for Apache Spark 代理程式問題。 - 如要深入瞭解 VM 啟動時間問題,請依
resource.type="gce_instance"篩選記錄,並尋找與叢集節點相關聯的執行個體名稱訊息,例如CLUSTER_NAME-m或CLUSTER_NAME-w-0。序列控制台記錄可顯示網路設定問題、磁碟問題,以及 VM 生命週期初期發生的指令碼失敗。
- 找出叢集建立失敗前後出現的
常見叢集失敗原因和疑難排解提示
本節概述 Managed Service for Apache Spark 叢集建立失敗的常見原因,並提供疑難排解提示,協助您解決叢集失敗問題。
IAM 權限不足
Managed Service for Apache Spark 叢集使用的 VM 服務帳戶必須具備適當的 IAM 角色,才能佈建 Compute Engine 執行個體、存取 Cloud Storage bucket、寫入記錄,以及與其他 Google Cloud 服務互動。
- 必要 Worker 角色:確認 VM 服務帳戶具備 Managed Service for Apache Spark Worker 角色 (
roles/dataproc.worker)。這個角色具備 Managed Service for Apache Spark 管理叢集資源所需的最低權限。 - 資料存取權限:如果工作會讀取或寫入 Cloud Storage 或 BigQuery,服務帳戶必須具備相關角色,例如 Cloud Storage 的
Storage Object Viewer、Storage Object Creator或Storage Object Admin,或 BigQuery 的BigQuery Data Viewer或BigQuery Editor。 - Logging 權限:服務帳戶必須具備將記錄寫入 Cloud Logging 所需權限的角色,例如
Logging Writer角色。
疑難排解提示:
找出服務帳戶:判斷叢集設定使用的 VM 服務帳戶。如未指定,預設值為 Compute Engine 預設服務帳戶。
驗證 IAM 角色:在 Google Cloud 控制台中,前往「IAM & Admin」>「IAM」頁面,找出叢集 VM 服務帳戶,然後確認該帳戶具備叢集作業所需的角色。授予任何缺少的角色。
超過資源配額
Managed Service for Apache Spark 叢集會耗用 Compute Engine 和其他 Google Cloud 服務的資源。超過專案或區域配額可能會導致叢集建立失敗。
- 常見的 Managed Service for Apache Spark 配額檢查項目:
CPUs(地區)DISKS_TOTAL_GB(地區)IN_USE_ADDRESSES(內部 IP 為區域性,外部 IP 為全域)- Dataproc API 配額,例如
ClusterOperationRequestsPerMinutePerProjectPerRegion
疑難排解提示:
- 查看配額:在 Google Cloud 控制台中,前往「IAM & Admin」>「IAM」頁面。依「服務」篩選「Compute Engine API」和「Dataproc API」。
- 查看用量與上限:找出已達上限或接近上限的配額。
- 如有需要,請申請提高配額。
網路設定問題
網路設定問題 (例如虛擬私有雲網路、子網路、防火牆或 DNS 設定不正確) 是叢集建立失敗的常見原因。叢集執行個體必須能彼此通訊,並與 Google API 通訊。
- 虛擬私有雲網路和子網路:
- 確認叢集虛擬私有雲網路和子網路存在且設定正確。
- 確認子網路有足夠的可用 IP 位址範圍。
- Private Google Access (PGA):如果叢集 VM 具有內部 IP 位址,且需要存取 Cloud Storage、Cloud Logging 和其他作業的 Google API,請確認子網路已啟用 Private Google Access。根據預設,使用 2.2 以上版本映像檔建立的 Managed Service for Apache Spark 叢集,會佈建僅限內部 IP 位址的 VM,並在叢集區域子網路上啟用 Private Google Access。
- Private Service Connect (PSC):如果您使用 Private Service Connect 存取 Google API,請確認已為 Managed Service for Apache Spark 依賴的 Google API 正確設定必要的 Private Service Connect 端點,例如
dataproc.googleapis.com、storage.googleapis.com、compute.googleapis.com和logging.googleapis.com。API 的 DNS 項目必須解析為私人 IP 位址。請注意,使用 Private Service Connect 並不代表您不需要使用虛擬私有雲對接,與其他客戶自行管理的虛擬私有雲網路通訊。 - 虛擬私有雲對等互連:如果叢集會與其他虛擬私有雲網路中的資源通訊,例如 Shared VPC 主機專案或其他客戶虛擬私有雲,請確認虛擬私有雲對等互連設定正確,且路由會傳播。
防火牆規則:
- 預設規則:確認預設防火牆規則 (例如
allow-internal或allow-ssh) 不會過於嚴格。 自訂規則:如果已設定自訂防火牆規則,請確認這些規則允許必要的通訊路徑:
- 叢集內的內部通訊 (-m 和 -w 節點之間)。
從叢集 VM 傳出至 Google API 的流量,使用公開 IP 或網際網路閘道、Private Google Access 或 Private Service Connect 端點。
工作所依賴的任何外部資料來源或服務的流量。
- 預設規則:確認預設防火牆規則 (例如
DNS 解析:確認叢集執行個體可以正確解析 Google API 和任何內部或外部服務的 DNS 名稱。
疑難排解提示:
- 檢查網路設定:檢查部署叢集的虛擬私有雲網路和子網路設定。
- 檢查防火牆規則:查看虛擬私有雲網路或 Shared VPC 主機專案中的防火牆規則。
- 測試連線能力:在叢集子網路中啟動臨時 Compute Engine VM,然後執行下列步驟:
ping或curl至外部 Google API 網域,例如storage.googleapis.com。nslookup,確認 DNS 解析為預期的 IP 位址 (Private Google Access 或 Private Service Connect)。- 執行 Google Cloud 連線能力測試,診斷從測試 VM 到相關端點的路徑。
初始化動作失敗
Managed Service for Apache Spark 初始化動作是指在建立叢集期間,於叢集 VM 上執行的指令碼。如果這些指令碼發生錯誤,叢集可能無法啟動。
疑難排解提示:
- 檢查記錄,找出初始化動作錯誤:在 Cloud Logging 中,尋找與叢集執行個體
init-actions或startup-script相關的記錄項目。 - 檢查指令碼路徑和權限:確認初始化動作指令碼正確位於 Cloud Storage 中,且叢集 VM 服務帳戶具備讀取 Cloud Storage 指令碼所需的
Storage Object Viewer角色。 - 偵錯指令碼邏輯:在模擬叢集環境的獨立 Compute Engine VM 上測試指令碼邏輯,找出錯誤。在指令碼中加入詳細記錄。
區域資源可用性 (缺貨)
有時,某個區域或可用區中的機器類型或資源可能會暫時無法使用 (缺貨)。這通常會導致與專案配額問題無關的 RESOURCE_EXHAUSTED 錯誤。
疑難排解提示:
- 嘗試其他可用區或區域:嘗試在同一區域內的其他可用區或不同區域建立叢集。
- 使用自動選擇可用區位置功能:使用 Managed Service for Apache Spark 的自動選擇可用區位置功能,自動選取有容量的可用區。
- 調整機型:如果使用自訂或特殊機型,請嘗試標準機型,看看能否解決問題。
與 Cloud Customer Care 團隊聯絡
如果叢集故障問題持續發生,請與 Cloud Customer Care 團隊聯絡。說明叢集故障問題和已採取的疑難排解步驟。此外,請提供下列資訊:
- 叢集診斷資料
- 下列指令的輸出內容:
gcloud dataproc clusters describe CLUSTER_NAME \ --region=REGION
- 已匯出失敗叢集的記錄。
使用 gcpdiag 工具
gcpdiag 是開放原始碼工具。並非官方支援的 Google Cloud 產品。您可以使用 gcpdiag 工具,找出並修正 Google Cloud專案問題。詳情請參閱 GitHub 上的 gcpdiag 專案。
gcpdiag 工具會執行下列檢查,協助您找出 Managed Service for Apache Spark 叢集建立問題:
- 資源用盡錯誤:評估 Logs Explorer 記錄,找出區域和可用區中的資源用盡情況。
- 配額不足:檢查 Managed Service for Apache Spark 叢集專案中的可用配額。
- 網路設定不完整:執行網路連線測試,包括檢查必要的防火牆規則,以及外部和內部 IP 設定。如果叢集已刪除,
gcpdiag工具就無法執行網路連線能力檢查。 - 跨專案設定不正確:檢查跨專案服務帳戶,並查看其他角色和組織政策強制執行情況。
- 缺少共用虛擬私有雲網路 IAM 角色:如果 Managed Service for Apache Spark 叢集使用 Shared VPC 網路,請檢查是否已新增必要的服務帳戶角色。
- 初始化動作失敗:評估 Logs Explorer 記錄,找出初始化動作指令碼失敗和逾時。
如需 gcpdiag dataproc 步驟清單 (包括叢集建立步驟),請參閱「Managed Service for Apache Spark 步驟」。
執行 gcpdiag 指令
您可以在Google Cloud 控制台的 Cloud Shell 或 Docker 容器中執行 gcpdiag 指令。
Google Cloud 控制台
- 完成並複製下列指令。
- 開啟 Google Cloud 控制台,然後啟用 Cloud Shell。 開啟 Cloud 控制台
- 貼上複製的指令。
- 執行
gcpdiag指令,下載gcpdiagDocker 映像檔,然後執行診斷檢查。視情況按照輸出內容中的指示修正失敗的檢查項目。
gcpdiag runbook managed-spark/cluster-creation \
--parameter project_id=PROJECT_ID \
--parameter cluster_name=CLUSTER_NAME \
--parameter OPTIONAL_FLAGSDocker
您可以使用包裝函式執行 gcpdiag,在 Docker 容器中啟動 gcpdiag。必須安裝 Docker 或 Podman。
- 複製下列指令,並在本機工作站執行。
curl https://gcpdiag.dev/gcpdiag.sh >gcpdiag && chmod +x gcpdiag
- 執行
gcpdiag指令。./gcpdiag runbook managed-spark/cluster-creation \ --parameter project_id=PROJECT_ID \ --parameter cluster_name=CLUSTER_NAME \ --parameter OPTIONAL_FLAGS
查看這個 Runbook 的可用參數。
更改下列內容:
- PROJECT_ID:包含 資源的專案 ID
- CLUSTER_NAME:專案中目標 Managed Service for Apache Spark 叢集的名稱
- OPTIONAL_PARAMETERS:新增一或多個下列選用參數。如果叢集已刪除,則必須提供這些參數。
cluster_uuid:專案中目標 Managed Service for Apache Spark 叢集的 UUIDservice_account:Managed Service for Apache Spark 叢集 VM 服務帳戶subnetwork:Managed Service for Apache Spark 叢集子網路完整 URI 路徑internal_ip_only:是非題cross_project:如果 Managed Service for Apache Spark 叢集使用其他專案中的 VM 服務帳戶,則為跨專案 ID
實用旗標:
--universe-domain:託管資源的可信任合作夥伴 Sovereign Cloud 網域 (如適用)--parameter或-p:Runbook 參數
如需所有 gcpdiag 工具旗標的清單和說明,請參閱 gcpdiag 使用說明。