排解叢集建立問題

使用 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 控制台

  1. 完成下列指令後,請複製指令。
  2. gcpdiag runbook dataproc/cluster-creation \
        --parameter project_id=PROJECT_ID \
        --parameter cluster_name=CLUSTER_NAME \
        --parameter OPTIONAL_FLAGS
  3. 開啟 Google Cloud 控制台並啟用 Cloud Shell。
  4. 開啟 Cloud 控制台
  5. 貼上複製的指令。
  6. 執行 gcpdiag 指令,下載 gcpdiag Docker 映像檔,然後執行診斷檢查。如適用,請按照輸出內容中的操作說明修正失敗的檢查。

Docker

您可以使用在 Docker 容器中啟動 gcpdiag wrapper 執行 gcpdiag。必須安裝 Docker 或 Podman

  1. 複製下列指令,並在本機工作站上執行。
    curl https://gcpdiag.dev/gcpdiag.sh >gcpdiag && chmod +x gcpdiag
  2. 執行 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 叢集的 UUID
      • service_account:Dataproc 叢集 VM 服務帳戶
      • subnetwork:Dataproc 叢集子網路完整 URI 路徑
      • internal_ip_only:True 或 False
      • cross_project:如果 Dataproc 叢集使用其他專案中的 VM 服務帳戶,則為跨專案 ID

實用標記:

如需所有 gcpdiag 工具旗標的清單和說明,請參閱 gcpdiag 使用說明

瞭解及修正叢集建立錯誤

本節列出 Dataproc 錯誤訊息,以及常見原因和解決方法。

  • 作業逾時:只有 0 個資料節點/節點管理員正在執行,未達到最低需求 (2 個)。

    原因:控制器節點無法與工作站節點通訊,因此無法建立叢集。

    解決方法:

  • projects/{projectId}/regions/{region}/subnetworks/{subnetwork}需要 compute.subnetworks.use 權限

    原因:如果您嘗試使用其他專案中的 VPC 網路設定 Dataproc 叢集,但 Dataproc 服務代理程式服務帳戶在代管該網路的共用 VPC 專案中沒有必要權限,就可能發生這個錯誤。

    解決方案:請按照「在其他專案中建立使用虛擬私有雲網路的叢集」一文中的步驟操作。

  • 可用區 projects/zones/{zone} 的資源不足,無法完成這項要求 (resource type:compute)

    原因:用來建立叢集的可用區資源不足。

    解決方法:

  • 超過配額錯誤

    CPU/CPUS_ALL_REGIONS 配額不足
    「DISKS_TOTAL_GB」配額不足
    「IN_USE_ADDRESSES」配額不足

    原因:您的 CPU磁碟IP 位址要求超出可用配額。

    解決方法:透過Google Cloud 控制台申請更多配額。

  • 初始化動作失敗

    原因:叢集建立期間提供的初始化動作安裝失敗。

    解決方法:

  • 無法初始化節點 CLUSTER-NAME-m。... See output in: <gs://PATH_TO_STARTUP_SCRIPT_OUTPUT>

    原因:無法初始化 Dataproc 叢集控制器節點。

    解決方法:

  • 無法建立叢集: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 位址。

    連線測試結果可協助您瞭解通往預設網際網路閘道的路徑,以及輸出允許防火牆是否已正確設定。

    根據連線測試結果:

  • 因更新而發生錯誤

    原因:叢集接受提交至 Dataproc 服務的工作,但無法手動或透過自動調度資源功能向上或向下調度資源。非標準叢集設定也可能導致這項錯誤。

    解決方法:

叢集疑難排解提示

本節提供額外指引,協助排解可能導致 Dataproc 叢集無法建立的常見問題。

如果 Dataproc 叢集無法佈建,通常會產生一般錯誤訊息,或在失敗前回報 PENDINGPROVISIONING 狀態。診斷及解決叢集故障問題的關鍵,在於檢查叢集記錄檔並評估常見故障點。

常見徵狀和錯誤訊息

以下是與叢集建立失敗相關的常見症狀和錯誤訊息:

  • 叢集狀態長時間維持 PENDINGPROVISIONING
  • 叢集轉換為 ERROR 狀態。
  • 建立叢集時發生一般 API 錯誤,例如 Operation timed out
  • 記錄或 API 回應錯誤訊息,例如:

    • RESOURCE_EXHAUSTED:與 CPU、磁碟或 IP 位址配額相關
    • Instance failed to start
    • Permission denied
    • Unable to connect to service_name.googleapis.comCould not reach required Google APIs
    • Connection refusednetwork unreachable
    • 與初始化動作失敗相關的錯誤,例如指令碼執行錯誤和找不到檔案。

查看叢集記錄檔

診斷叢集建立失敗問題時,一開始的重要步驟是查看 Cloud Logging 中提供的詳細叢集記錄。

  1. 前往記錄檔探索工具:在 Google Cloud 控制台中開啟記錄檔探索工具
  2. 篩選 Dataproc 叢集:
    • 在「資源」下拉式選單中,選取 Cloud Dataproc Cluster
    • 輸入 cluster_nameproject_id。你也可以依location (區域) 篩選。
  3. 檢查記錄項目:
    • 找出叢集建立失敗時間附近的 ERRORWARNING 層級訊息。
    • 請注意 master-startupworker-startupagent 元件的記錄,深入瞭解 VM 層級或 Dataproc 代理程式問題。
    • 如要深入瞭解 VM 開機時間問題,請依 resource.type="gce_instance" 篩選記錄,並尋找與叢集節點相關聯的執行個體名稱 (例如 CLUSTER_NAME-mCLUSTER_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 ViewerStorage Object CreatorStorage Object Admin,或是 BigQuery 的 BigQuery Data ViewerBigQuery 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.comstorage.googleapis.comcompute.googleapis.comlogging.googleapis.com) 已正確設定必要的 Private Service Connect 端點。API 的 DNS 項目必須解析為私人 IP 位址。請注意,使用 Private Service Connect 並不會消除與其他客戶管理的 VPC 網路通訊時,使用 VPC 對等互連的需求。
  • VPC 對等互連:如果叢集與其他 VPC 網路中的資源通訊 (例如共用 VPC 主專案或其他客戶 VPC),請確認 VPC 對等互連設定正確,且路徑正在傳播。
  • 防火牆規則:

    • 預設規則:確認預設防火牆規則 (例如 allow-internalallow-ssh) 不會過於嚴格。
    • 自訂規則:如果已設定自訂防火牆規則,請確認這些規則允許必要的通訊路徑:

      • 叢集內的內部通訊 (介於 -m-w 節點之間)。
      • 叢集 VM 傳送至 Google API 的輸出流量,可使用公開 IP、網際網路閘道、Private Google Access 或 Private Service Connect 端點。

      • 作業所依附的任何外部資料來源或服務的流量。

  • DNS 解析:確認叢集執行個體可以正確解析 Google API 和任何內部或外部服務的 DNS 名稱。

疑難排解提示:

  • 檢查網路設定:檢查叢集部署所在的 VPC 網路和子網路設定。
  • 檢查防火牆規則:查看虛擬私有雲網路或共用虛擬私有雲主專案中的防火牆規則。
  • 測試連線:在叢集子網路中啟動臨時 Compute Engine VM,然後執行下列步驟:
    • pingcurl 至外部 Google API 網域,例如 storage.googleapis.com
    • nslookup,確認 DNS 解析是否指向預期的 IP 位址 (私人 Google 存取權或 Private Service Connect)。
    • 執行 Google Cloud 連線測試,診斷從測試 VM 到相關端點的路徑。

初始化動作失敗

Dataproc 初始化動作是指在叢集建立期間,於叢集 VM 上執行的指令碼。如果這些指令碼發生錯誤,叢集可能無法啟動。

疑難排解提示:

  • 檢查初始化動作錯誤的記錄:在 Cloud Logging 中,尋找與叢集執行個體相關的 init-actionsstartup-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
      
  • 已匯出失敗叢集的記錄。

後續步驟