排解批次和工作階段連線問題

本頁提供指引,說明如何診斷及解決 Serverless for Apache Spark 批次工作負載和互動式工作階段的常見網路連線問題。這些問題可能會導致工作負載無法存取必要的資料來源、外部服務或 Google Cloud API。

常見徵狀和錯誤訊息

如果 Serverless for Apache Spark 發生連線問題,您可能會遇到下列錯誤:

  • Unable to connect to service_name.googleapis.com
  • Could not reach required Google APIs
  • Connection refused
  • Host unreachable
  • Operation timed out
  • Permission denied (如果封鎖 API 呼叫,通常與網路有關)

您也可能會遇到與存取 Cloud Storage、BigQuery 或其他資料庫中的資料相關的錯誤。

常見原因和疑難排解提示

本節列出 Serverless for Apache Spark 連線問題的常見原因,並提供疑難排解提示,協助您解決問題。

網路設定

網路設定錯誤是造成連線失敗的常見原因。 Apache Spark 無伺服器工作負載和工作階段會在具有內部 IP 位址的 VM 上執行,並在工作負載或工作階段子網路上自動啟用私人 Google 存取權 (PGA),以存取 Google API 和服務。詳情請參閱「Serverless for Apache Spark 網路設定」。

  • 存取權選項:

    • Private Service Connect (PSC):您可以在虛擬私有雲網路中建立私人端點,存取特定 Google API。

      • 在 Google Cloud 控制台中,依序前往「Private Service Connect」>「Endpoints」(端點)。連線端點,或確認端點已連線至所有必要 API,例如 storage.googleapis.comdataproc.googleapis.com,並連線至批次工作負載或工作階段虛擬私有雲網路。
    • Cloud NAT:如果工作負載需要存取公開網際網路,您可以為批次工作負載或工作階段子網路設定 Cloud NAT:

      • 前往 Google Cloud 控制台的「Cloud NAT」頁面。設定閘道,或確認已為批次工作負載或工作階段虛擬私有雲網路、區域和子網路設定閘道。此外,請確認防火牆規則允許輸出至 0.0.0.0/0。詳情請參閱「設定 Cloud NAT」一文。
  • 防火牆規則:

    • 虛擬私有雲網路 (或共用虛擬私有雲網路主專案,如適用) 中的輸出防火牆規則不得封鎖前往必要目的地的輸出流量。
      • 如適用,輸出規則必須允許流量傳輸至外部服務,例如 Google Cloud以外的公開 API 和資料庫。如果批次工作負載或工作階段需要存取網際網路,您可以使用 Cloud NAT 提供子網路輸出。
    • 雖然過於嚴格的連入規則並非連線問題的常見原因,但可能會無意間封鎖必要的傳回流量或內部通訊。
  • DNS 解析:

    • 您必須在虛擬私有雲網路中設定 DNS 解析。工作負載和工作階段必須能夠解析 Google API 的主機名稱,例如 storage.googleapis.combigquery.googleapis.com,以及外部服務。
    • 自訂 DNS 伺服器和 Cloud DNS 私人區域必須轉送或解析 Google 網域的查詢。
    • 如果您使用 Private Service Connect 私下存取 Google API,Google 服務的 DNS 記錄必須使用 PSC 端點,解析為 VPC 網路內的私人 IP 位址。

疑難排解提示:

  • 找出網路和子網路設定:

    • 從 Serverless for Apache Spark 批次或工作階段詳細資料中,查看 networkUrisubnetUri
    • 在 Google Cloud 控制台中,檢查 VPC 網路和子網路的設定。
  • 從 Proxy VM 測試連線能力:

    • 使用批次或工作階段服務帳戶,在批次或工作階段子網路中啟動測試 Compute Engine VM。
    • 從測試 VM 執行下列連線測試:
      • nslookup storage.googleapis.com,驗證 DNS 解析。 查詢其他 Google API 網域,例如 bigquery.googleapis.comdataproc.googleapis.com。使用私人 Google 存取權 (在 Serverless for Apache Spark 子網路上會自動啟用) 或 Private Service Connect 時,網域必須解析為私人 IP 位址。
      • curl -v https://storage.googleapis.com,確認與 Google API 的 HTTPS 連線。你也可以嘗試連線至其他 Google 服務。
      • ping 8.8.8.8 測試網路連線,視批次或工作階段需求而定。如果預期使用 Cloud NAT,請嘗試 curl -v https://example.com
    • 執行 Google Cloud 網路智慧中心連線測試,診斷從子網路到相關端點 (例如 Google API 和外部 IP 位址) 的網路路徑。
  • 查看 Cloud Logging 中的網路錯誤:

    • 查看 Serverless for Apache Spark 工作負載或工作階段的記錄。尋找與網路逾時、連線遭拒或 API 呼叫失敗相關的 ERRORWARNING 訊息。依 jsonPayload.component="driver"jsonPayload.component="executor" 篩選,找出 Spark 專屬的網路問題。

IAM 權限

如果 IAM 權限不足,工作負載或工作階段就無法存取資源,導致 API 呼叫遭拒,進而發生網路故障。

批次工作負載或工作階段使用的服務帳戶必須具備必要角色:

  • Dataproc 工作者角色 (roles/dataproc.worker)。
  • 資料存取角色,例如 roles/storage.objectViewerroles/bigquery.dataViewer)。
  • 記錄:(roles/logging.logWriter)。

疑難排解提示:

  • 找出批次工作負載或工作階段服務帳戶。如未指定,則預設為 Compute Engine 預設服務帳戶
  • 前往 Google Cloud 控制台的「IAM & Admin」(IAM 與管理) >「IAM」 頁面,找出批次工作負載或工作階段服務帳戶,然後確認該帳戶是否具備工作負載作業所需的角色。授予任何缺少的角色。

外部服務設定

如果工作負載連線至 Google Cloud以外的資料庫或服務,請確認其設定:

  • 確認外部服務防火牆或安全群組允許來自 VPC 網路 IP 範圍的連入連線:如適用,請使用 VPC 對等互連、Cloud VPN 或 Cloud Interconnect,或 Cloud NAT IP 位址檢查內部 IP 位址。
  • 查看資料庫憑證或連線字串。檢查連線詳細資料、使用者名稱和密碼。

後續步驟