使用 gcpdiag
工具
gcpdiag
是開放原始碼工具。這並非正式支援的 Google Cloud 產品。您可以使用 gcpdiag
工具找出並修正 Google Cloud專案問題。詳情請參閱 GitHub 上的 gcpdiag 專案。
gcpdiag
工具會執行下列檢查,協助您找出 Dataproc 叢集建立問題:
- 缺貨錯誤:評估記錄檔探索工具記錄,找出區域和地帶的缺貨情形。
- 配額不足:檢查 Dataproc 叢集專案的可用配額。
- 網路設定不完整:執行網路連線測試,包括檢查必要的防火牆規則,以及外部和內部 IP 設定。如果叢集已刪除,
gcpdiag
工具就無法執行網路連線檢查。 - 跨專案設定有誤:檢查跨專案服務帳戶,並審查其他角色和機構政策強制執行情況。
- 缺少共用虛擬私有雲網路 IAM 角色:如果 Dataproc 叢集使用共用虛擬私有雲網路,系統會檢查是否已新增必要的服務帳戶角色。
- 初始化動作失敗:評估記錄探索工具記錄,找出初始化動作指令碼失敗和逾時的情況。
如需 gcpdiag
叢集建立步驟清單,請參閱可能步驟。
執行 gcpdiag
指令
您可以在Google Cloud 控制台的 Cloud Shell 中,或在 Docker 容器內執行 gcpdiag
指令。
Google Cloud 控制台
- 完成下列指令後,請複製指令。
- 開啟 Google Cloud 控制台並啟用 Cloud Shell。 開啟 Cloud 控制台
- 貼上複製的指令。
- 執行
gcpdiag
指令,下載gcpdiag
Docker 映像檔,然後執行診斷檢查。如適用,請按照輸出內容中的操作說明修正失敗的檢查。
gcpdiag runbook dataproc/cluster-creation \
--parameter project_id=PROJECT_ID \
--parameter cluster_name=CLUSTER_NAME \
--parameter OPTIONAL_FLAGS
Docker
您可以使用在 Docker 容器中啟動 gcpdiag
的
wrapper 執行 gcpdiag
。必須安裝 Docker 或 Podman。
- 複製下列指令,並在本機工作站上執行。
curl https://gcpdiag.dev/gcpdiag.sh >gcpdiag && chmod +x gcpdiag
- 執行
gcpdiag
指令。./gcpdiag runbook dataproc/cluster-creation \ --parameter project_id=PROJECT_ID \ --parameter cluster_name=CLUSTER_NAME \ --parameter OPTIONAL_FLAGS
查看這本 Runbook 的可用參數。
更改下列內容:
- PROJECT_ID:包含資源的專案 ID
- CLUSTER_NAME:專案中目標 Dataproc 叢集的名稱
- OPTIONAL_PARAMETERS:新增一或多個下列選用參數。如果叢集已刪除,則必須提供這些參數。
cluster_uuid
:專案中目標 Dataproc 叢集的 UUIDservice_account
:Dataproc 叢集 VM 服務帳戶subnetwork
:Dataproc 叢集子網路完整 URI 路徑internal_ip_only
:True 或 Falsecross_project
:如果 Dataproc 叢集使用其他專案中的 VM 服務帳戶,則為跨專案 ID
實用標記:
--universe-domain
:如果適用,代管資源的信任合作夥伴主權雲端網域--parameter
或-p
:Runbook 參數
如需所有 gcpdiag
工具旗標的清單和說明,請參閱 gcpdiag
使用說明。
瞭解及修正叢集建立錯誤
本節列出 Dataproc 錯誤訊息,以及常見原因和解決方法。
作業逾時:只有 0 個資料節點/節點管理員正在執行,未達到最低需求 (2 個)。
原因:控制器節點無法與工作站節點通訊,因此無法建立叢集。
解決方法:
- 檢查防火牆規則警告。
- 請確認已設置正確的防火牆規則。詳情請參閱預設 Dataproc 防火牆規則總覽。
- 在 Google Cloud 控制台中執行連線測試,找出阻礙控制器和工作站節點通訊的因素。
projects/{projectId}/regions/{region}/subnetworks/{subnetwork}
需要compute.subnetworks.use
權限原因:如果您嘗試使用其他專案中的 VPC 網路設定 Dataproc 叢集,但 Dataproc 服務代理程式服務帳戶在代管該網路的共用 VPC 專案中沒有必要權限,就可能發生這個錯誤。
解決方案:請按照「在其他專案中建立使用虛擬私有雲網路的叢集」一文中的步驟操作。
可用區
projects/zones/{zone}
的資源不足,無法完成這項要求(resource type:compute)
原因:用來建立叢集的可用區資源不足。
解決方法:
- 在其他可用區建立叢集。
- 使用 Dataproc 的自動選擇區域位置功能。
超過配額錯誤
CPU/CPUS_ALL_REGIONS 配額不足
「DISKS_TOTAL_GB」配額不足
「IN_USE_ADDRESSES」配額不足解決方法:透過Google Cloud 控制台申請更多配額。
初始化動作失敗
原因:叢集建立期間提供的初始化動作安裝失敗。
解決方法:
- 請參閱初始化動作考量事項和指引。
- 檢查輸出記錄。錯誤訊息應提供 Cloud Storage 中記錄的連結。
無法初始化節點
CLUSTER-NAME-m
。... See output in:<gs://PATH_TO_STARTUP_SCRIPT_OUTPUT>
原因:無法初始化 Dataproc 叢集控制器節點。
解決方法:
- 查看錯誤訊息中列出的啟動指令碼輸出記錄 (
gs://PATH_TO_STARTUP_SCRIPT_OUTPUT
),並確認節點初始化失敗的原因。 - 可能原因包括 Dataproc 叢集網路設定問題,以及無法安裝 Python 套件依附元件。
- 如果查看啟動指令碼記錄後仍無法解決問題,請修正任何使用者端問題,然後以指數輪詢重試,並與 Google Cloud 支援團隊聯絡。
- 查看錯誤訊息中列出的啟動指令碼輸出記錄 (
無法建立叢集:IP 位址空間已用盡
原因:無法提供佈建所要求叢集節點所需的 IP 位址空間。
解決方法:
- 在其他子網路或網路上建立叢集。
- 減少網路用量,釋出 IP 位址空間。
- 等待網路提供足夠的 IP 空間。
初始化指令碼錯誤訊息:存放區 REPO_NAME 不再有 Release 檔案
原因: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 fi
等待執行個體
DATAPROC_CLUSTER_VM_NAME
回報逾時或網路無法連線:dataproccontrol-REGION.googleapis.com
原因:這些錯誤訊息表示 Dataproc 叢集的網路設定不完整,您可能缺少通往預設網際網路閘道的路徑或防火牆規則。
解決方法:
如要排解這個問題,可以建立下列連線能力測試:
- 在兩個 Dataproc 叢集 VM 之間建立連線測試。這項測試的結果有助於瞭解網路的輸入或輸出允許防火牆規則,是否正確套用至叢集 VM。
- 在 Dataproc 叢集 VM 與目前的 Dataproc 控制 API IP 位址之間建立連線測試。如要取得目前的 Dataproc 控制項 API IP 位址,請使用下列指令:
dig dataproccontrol-REGION.googleapis.com A
使用輸出內容「答案」部分中的任何 IPv4 位址。
連線測試結果可協助您瞭解通往預設網際網路閘道的路徑,以及輸出允許防火牆是否已正確設定。
根據連線測試結果:
- 在叢集虛擬私有雲網路中新增網際網路路徑:
0.0.0.0/0
適用於 IPv4,::/0
適用於 IPv6,並使用--next-hop-gateway=default-internet-gateway
。 - 新增存取權控管防火牆規則。
因更新而發生錯誤
原因:叢集接受提交至 Dataproc 服務的工作,但無法手動或透過自動調度資源功能向上或向下調度資源。非標準叢集設定也可能導致這項錯誤。
解決方法:
重設叢集:開啟支援單,附上診斷 TAR 檔案,並要求將叢集重設為「RUNNING」狀態。
新叢集: 使用相同設定重新建立叢集。這個解決方案比支援團隊提供的重設方式更快。
叢集疑難排解提示
本節提供額外指引,協助排解可能導致 Dataproc 叢集無法建立的常見問題。
如果 Dataproc 叢集無法佈建,通常會產生一般錯誤訊息,或在失敗前回報 PENDING
或 PROVISIONING
狀態。診斷及解決叢集故障問題的關鍵,在於檢查叢集記錄檔並評估常見故障點。
常見徵狀和錯誤訊息
以下是與叢集建立失敗相關的常見症狀和錯誤訊息:
- 叢集狀態長時間維持
PENDING
或PROVISIONING
。 - 叢集轉換為
ERROR
狀態。 - 建立叢集時發生一般 API 錯誤,例如
Operation timed out
。 記錄或 API 回應錯誤訊息,例如:
RESOURCE_EXHAUSTED
:與 CPU、磁碟或 IP 位址配額相關Instance failed to start
Permission denied
Unable to connect to service_name.googleapis.com
或Could not reach required Google APIs
Connection refused
或network unreachable
- 與初始化動作失敗相關的錯誤,例如指令碼執行錯誤和找不到檔案。
查看叢集記錄檔
診斷叢集建立失敗問題時,一開始的重要步驟是查看 Cloud Logging 中提供的詳細叢集記錄。
- 前往記錄檔探索工具:在 Google Cloud 控制台中開啟記錄檔探索工具。
- 篩選 Dataproc 叢集:
- 在「資源」下拉式選單中,選取
Cloud Dataproc Cluster
。 - 輸入
cluster_name
和project_id
。你也可以依location
(區域) 篩選。
- 在「資源」下拉式選單中,選取
- 檢查記錄項目:
- 找出叢集建立失敗時間附近的
ERROR
或WARNING
層級訊息。 - 請注意
master-startup
、worker-startup
和agent
元件的記錄,深入瞭解 VM 層級或 Dataproc 代理程式問題。 - 如要深入瞭解 VM 開機時間問題,請依
resource.type="gce_instance"
篩選記錄,並尋找與叢集節點相關聯的執行個體名稱 (例如CLUSTER_NAME-m
或CLUSTER_NAME-w-0
) 傳送的訊息。序列埠控制台記錄可揭露 VM 生命週期早期發生的網路設定問題、磁碟問題和指令碼失敗情形。
- 找出叢集建立失敗時間附近的
叢集失敗的常見原因和疑難排解提示
本節將說明 Dataproc 叢集建立作業可能失敗的常見原因,並提供疑難排解提示,協助您排解叢集失敗問題。
身分與存取權管理權限不足
Dataproc 叢集使用的 VM 服務帳戶必須具備適當的 IAM 角色,才能佈建 Compute Engine 執行個體、存取 Cloud Storage 值區、寫入記錄,以及與其他 Google Cloud 服務互動。
- 必要的工作者角色:確認 VM 服務帳戶具有 Dataproc 工作者角色 (
roles/dataproc.worker
)。這個角色具備 Dataproc 管理叢集資源所需的最低權限。 - 資料存取權:如果作業會從 Cloud Storage 或 BigQuery 讀取/寫入資料,服務帳戶需要相關角色,例如 Cloud Storage 的
Storage Object Viewer
、Storage Object Creator
或Storage Object Admin
,或是 BigQuery 的BigQuery Data Viewer
或BigQuery Editor
。 - 記錄權限:服務帳戶必須具備可將記錄檔寫入 Cloud Logging 的角色權限,例如
Logging Writer
角色。
疑難排解提示:
找出服務帳戶:判斷叢集設定使用的 VM 服務帳戶。如未指定,預設值為 Compute Engine 預設服務帳戶。
驗證 IAM 角色:在 Google Cloud 控制台中前往「IAM & Admin」>「IAM」頁面,找出叢集 VM 服務帳戶,然後確認該帳戶是否具備叢集作業所需的角色。授予任何缺少的角色。
超出資源配額
Dataproc 叢集會耗用 Compute Engine 和其他服務的資源。 Google Cloud 超過專案或區域配額可能會導致叢集建立失敗。
- 要檢查的常見 Dataproc 配額:
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 通訊。
- 虛擬私有雲網路和子網路:
- 確認叢集 VPC 網路和子網路存在,且設定正確無誤。
- 確認子網路有足夠的可用 IP 位址範圍。
- 私人 Google 存取權 (PGA):如果叢集 VM 具有內部 IP 位址,且需要存取 Google API 才能執行 Cloud Storage、Cloud Logging 和其他作業,請確認子網路上已啟用私人 Google 存取權。根據預設,使用 2.2 以上版本映像檔建立的 Dataproc 叢集,會佈建僅有內部 IP 位址的 VM,並在叢集區域子網路上啟用 Private Google Access。
- Private Service Connect (PSC):如果您使用 Private Service Connect 存取 Google API,請確認 Dataproc 依附的 Google API (例如
dataproc.googleapis.com
、storage.googleapis.com
、compute.googleapis.com
和logging.googleapis.com
) 已正確設定必要的 Private Service Connect 端點。API 的 DNS 項目必須解析為私人 IP 位址。請注意,使用 Private Service Connect 並不會消除與其他客戶管理的 VPC 網路通訊時,使用 VPC 對等互連的需求。。 - VPC 對等互連:如果叢集與其他 VPC 網路中的資源通訊 (例如共用 VPC 主專案或其他客戶 VPC),請確認 VPC 對等互連設定正確,且路徑正在傳播。
防火牆規則:
- 預設規則:確認預設防火牆規則 (例如
allow-internal
或allow-ssh
) 不會過於嚴格。 自訂規則:如果已設定自訂防火牆規則,請確認這些規則允許必要的通訊路徑:
- 叢集內的內部通訊 (介於 -m 和 -w 節點之間)。
叢集 VM 傳送至 Google API 的輸出流量,可使用公開 IP、網際網路閘道、Private Google Access 或 Private Service Connect 端點。
作業所依附的任何外部資料來源或服務的流量。
- 預設規則:確認預設防火牆規則 (例如
DNS 解析:確認叢集執行個體可以正確解析 Google API 和任何內部或外部服務的 DNS 名稱。
疑難排解提示:
- 檢查網路設定:檢查叢集部署所在的 VPC 網路和子網路設定。
- 檢查防火牆規則:查看虛擬私有雲網路或共用虛擬私有雲主專案中的防火牆規則。
- 測試連線:在叢集子網路中啟動臨時 Compute Engine VM,然後執行下列步驟:
ping
或curl
至外部 Google API 網域,例如storage.googleapis.com
。nslookup
,確認 DNS 解析是否指向預期的 IP 位址 (私人 Google 存取權或 Private Service Connect)。- 執行 Google Cloud 連線測試,診斷從測試 VM 到相關端點的路徑。
初始化動作失敗
Dataproc 初始化動作是指在叢集建立期間,於叢集 VM 上執行的指令碼。如果這些指令碼發生錯誤,叢集可能無法啟動。
疑難排解提示:
- 檢查初始化動作錯誤的記錄:在 Cloud Logging 中,尋找與叢集執行個體相關的
init-actions
或startup-script
記錄項目。 - 檢查指令碼路徑和權限:確認初始化動作指令碼是否正確位於 Cloud Storage 中,且叢集 VM 服務帳戶是否具備讀取 Cloud Storage 指令碼所需的
Storage Object Viewer
角色。 - 偵錯指令碼邏輯:在模擬叢集環境的獨立 Compute Engine VM 上測試指令碼邏輯,找出錯誤。在指令碼中新增詳細記錄。
區域資源供應情形 (缺貨)
有時,區域或可用區中的機器類型或資源會暫時無法使用 (缺貨)。通常會導致與專案配額問題無關的 RESOURCE_EXHAUSTED
錯誤。
疑難排解提示:
- 嘗試使用其他區域或地區:嘗試在同一地區內的其他區域,或在其他地區建立叢集。
- 使用自動選擇區域位置:使用 Dataproc 自動選擇區域位置功能,自動選取有容量的區域。
- 調整機器類型:如果使用自訂或專用機器類型,請嘗試使用標準機器類型,看看是否能解決問題。
與 Cloud Customer Care 聯絡
如果叢集故障問題仍持續發生,請與 Cloud Customer Care 團隊聯絡。請說明叢集故障問題,以及採取的疑難排解步驟。此外,請提供下列資訊:
- 叢集診斷資料
- 下列指令的輸出內容:
gcloud dataproc clusters describe CLUSTER_NAME \ -region=REGION
- 已匯出失敗叢集的記錄。
後續步驟
- 進一步瞭解 Dataproc 監控和疑難排解工具。
- 瞭解如何診斷 Dataproc 叢集。
- 請參閱 Dataproc 常見問題 文件。