本文提供指引,協助您排解常見問題,避免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 Storage:讀取資料需要
- 記錄權限:服務帳戶需要具備可將記錄寫入 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.memory
和spark.driver.cores
值。 確認這些限制在合理範圍內,且符合可用的 DCU。 如果這些屬性的值過大,可能會導致資源耗盡和初始化失敗。移除所有不必要或實驗性的 Spark 屬性,簡化偵錯程序。請嘗試執行「Hello World」Spark 應用程式,判斷問題是出在環境設定,還是程式碼複雜度或錯誤。
確認為批次或工作階段指定的所有應用程式 JAR、Python 檔案或依附元件,都正確位於 Cloud Storage 中,且批次或工作階段服務帳戶可存取這些檔案。
檢查記錄
診斷批次建立失敗問題時,最重要的步驟就是檢查 Cloud Logging 中的詳細記錄。
- 前往 Google Cloud 控制台的「Cloud Logging」頁面。
- 篩選 Serverless for Apache Spark 批次或工作階段:
- 在「資源」下拉式選單中,選取
Cloud Dataproc Batch
或Cloud Dataproc Session
。 - 依「
batch_id
」或「session_id
」篩選失敗的批次或工作階段。 你也可以依project_id
和location
(區域) 篩選。
- 在「資源」下拉式選單中,選取
- 尋找含有
jsonPayload.component="driver"
的記錄項目。 這些記錄通常包含具體的錯誤訊息或堆疊追蹤,可在 600 秒逾時前,找出驅動程式初始化失敗的原因。