排解工作延遲問題

本頁面列出 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 的記憶體,並允許每 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% (0.9) 時,Dataproc 代理程式會限制工作提交的流量,達到此限制後,系統將無法調度新的工作。

在叢集上調度其他工作所需的可用記憶體不足。

解決方法:

  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 叢集屬性將其設定為不同的值。

查看工作狀態

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