排解批次和工作階段建立失敗問題

本文提供指引,協助您排解常見問題,避免Google Cloud Serverless for Apache Spark 無法啟動 Spark 批次工作負載和互動式工作階段。

總覽

通常,如果批次或工作階段無法啟動,系統會回報下列錯誤訊息:

Driver compute node failed to initialize for batch in 600 seconds

這則錯誤訊息表示 Spark 驅動程式無法在預設的 600 秒 (10 分鐘) 逾時期間內啟動。常見原因與服務帳戶權限、資源可用性、網路設定或 Spark 屬性有關。

批次和工作階段啟動失敗原因及疑難排解步驟

下列各節列出批次和工作階段啟動失敗的常見原因,並提供疑難排解提示,協助您解決問題。

服務帳戶權限不足

Serverless for Apache Spark 批次或工作階段使用的服務帳戶,必須具備特定 IAM 角色,包括 Serverless for Apache Spark 作業的權限,以及存取 Google Cloud 資源的權限。如果服務帳戶缺少必要角色,批次或工作階段的 Spark 驅動程式可能無法初始化。

  • 必要的工作者角色:批次或工作階段服務帳戶必須具備 Dataproc 工作者角色 (roles/dataproc.worker)。這個角色包含 Serverless for Apache Spark 佈建及管理運算資源所需的最低權限。
  • 資料存取權:如果 Spark 應用程式會讀取或寫入 Cloud Storage 或 BigQuery,服務帳戶需要與這些服務相關的角色:
    • Cloud Storage:讀取資料需要 Storage Object Viewer 角色 (roles/storage.objectViewer),寫入資料則需要 Storage Object Creator 角色 (roles/storage.objectCreator) 或 Storage Object Admin 角色 (roles/storage.admin)。
    • BigQuery:讀取資料需要 BigQuery Data Viewer 角色 (roles/bigquery.dataViewer),寫入資料則需要 BigQuery Data Editor 角色 (roles/bigquery.dataEditor)。
  • 記錄權限:服務帳戶需要具備可將記錄寫入 Cloud Logging 的角色權限。通常 Logging Writer 角色 (roles/logging.logWriter) 就足夠了。

疑難排解提示:

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

配額不足

如果超出專案或區域專屬的 Google Cloud Serverless for Apache Spark Google Cloud 或其他資源配額,就無法啟動新的批次或工作階段。

疑難排解提示:

  • 請參閱「Google Cloud Serverless for Apache Spark 配額」頁面,瞭解並行批次、DCU 和重組儲存空間的限制。

    • 您也可以使用 gcloud compute quotas list 指令,查看專案和區域的目前用量和限制:
      gcloud compute quotas list --project=PROJECT_ID --filter="service:dataproc.googleapis.com"
      
  • 如果經常達到配額上限,請考慮透過 Google Cloud 控制台申請提高配額。

網路設定問題

網路設定不正確 (例如虛擬私有雲設定、私人 Google 存取權或防火牆規則),可能會導致 Spark 驅動程式無法初始化或連線至必要服務。

疑難排解提示:

  • 確認為批次或工作階段指定的虛擬私有雲網路和子網路設定正確,且有足夠的可用 IP 位址。

  • 如果批次或工作階段需要存取 Google API 和服務,但不想經過公開網際網路,請確認子網路已啟用 Private Google Access。

  • 請檢查 VPC 防火牆規則,確認規則不會意外封鎖內部通訊,或封鎖 Spark 應用程式所需的 Google API 或外部服務的輸出流量。

Spark 屬性無效或應用程式程式碼有問題

設定錯誤的 Spark 屬性 (尤其是與驅動程式資源相關的屬性),或是 Spark 應用程式程式碼中的問題,都可能導致啟動失敗。

疑難排解提示:

  • 檢查 spark.driver.memoryspark.driver.cores 值。 確認這些限制在合理範圍內,且符合可用的 DCU。 如果這些屬性的值過大,可能會導致資源耗盡和初始化失敗。移除所有不必要或實驗性的 Spark 屬性,簡化偵錯程序。

  • 請嘗試執行「Hello World」Spark 應用程式,判斷問題是出在環境設定,還是程式碼複雜度或錯誤。

  • 確認為批次或工作階段指定的所有應用程式 JAR、Python 檔案或依附元件,都正確位於 Cloud Storage 中,且批次或工作階段服務帳戶可存取這些檔案。

檢查記錄

診斷批次建立失敗問題時,最重要的步驟就是檢查 Cloud Logging 中的詳細記錄。

  1. 前往 Google Cloud 控制台的「Cloud Logging」頁面。
  2. 篩選 Serverless for Apache Spark 批次或工作階段:
    1. 在「資源」下拉式選單中,選取 Cloud Dataproc BatchCloud Dataproc Session
    2. 依「batch_id」或「session_id」篩選失敗的批次或工作階段。 你也可以依 project_idlocation (區域) 篩選。
  3. 尋找含有 jsonPayload.component="driver" 的記錄項目。 這些記錄通常包含具體的錯誤訊息或堆疊追蹤,可在 600 秒逾時前,找出驅動程式初始化失敗的原因。