排解工作延遲問題

本頁面列出 Dataproc 工作排程延遲的常見原因,並提供相關資訊,協助您避免發生這類情況。

總覽

以下是 Dataproc 工作延遲 (受到節流) 的常見原因:

  • 執行中的工作過多
  • 系統記憶體用量偏高
  • 可用記憶體不足
  • 超過頻率限制

工作延遲訊息通常會採用下列格式:

Awaiting execution [SCHEDULER_MESSAGE]"

下列各節針對特定工作延遲情況,提供可能原因和解決方案。

執行中的工作過多

排程器訊息:

Throttling job ### (and maybe others): Too many running jobs (current=xx max=xx)

原因:

超過根據主 VM 記憶體計算出的並行工作數量上限 (工作驅動程式會在 Dataproc 叢集主 VM 上執行)。根據預設,Dataproc 會為應用程式保留 3.5 GB 的記憶體,且每 1 GB 記憶體可執行 1 項工作。

舉例來說,n1-standard-4 機器類型有 15GB 記憶體。扣除預留的 3.5GB 營運費用後,11.5GB 仍有 向下捨入為整數後,11GB 最多可處理 11 個並行工作。

解決方法:

  1. 監控 CPU 使用率和記憶體等記錄指標,估算工作需求。

  2. 建立工作叢集時:

    1. 為叢集主 VM 使用記憶體較大的機器類型。

    2. 如果每個工作需要的 1GB 超出您的需求,請將dataproc:dataproc.scheduler.driver-size-mb 叢集屬性設為小於 1024

    3. dataproc:dataproc.scheduler.max-concurrent-jobs 叢集屬性設為符合工作需求的值。

系統記憶體用量過高或可用記憶體不足

排程器訊息:

Throttling job xxx_____JOBID_____xxx (and maybe others): High system memory usage (current=xx%)

Throttling job xxx_____JOBID_____xxx (and maybe others): Not enough free memory (current=xx min=xx)

原因:

根據預設,當記憶體用量達到 90% 時,Dataproc 代理程式會限制工作提交作業 (0.9))。達到這項限制後,系統就無法排定新工作。

叢集上排定其他工作所需的可用記憶體量不足。

解決方法:

  1. 建立叢集時:

    1. 提高dataproc:dataproc.scheduler.max-memory-used 叢集屬性的值。 舉例來說,將 0.90 預設值設為 0.95
    2. 增加dataproc.scheduler.min-free-memory.mb 叢集屬性的值。預設值為 256 MB。

超過工作頻率限制

排程器訊息:

Throttling job xxx__JOBID___xxx (and maybe others): Rate limit

原因:

Dataproc 代理程式已達工作提交速率上限。

解決方法:

  1. 根據預設,Dataproc 代理程式工作提交作業的限制為 1.0 QPS。您可以使用 dataproc:dataproc.scheduler.job-submission-rate 叢集屬性建立叢集時,將此值設為其他值。

查看工作狀態。

如要查看工作狀態和詳細資料,請參閱「工作監控和偵錯」。