分享方式:


Spark 階段高 I/O

接下來,再次查看最長階段的 I/O 統計數據:

長階段 I/O

什麼是高 I/O?

I/O 數據行中需要多少數據才能視為高? 若要瞭解這一點,請先從任何指定數據行中的最高數字開始。 然後,請考慮您在所有背景工作角色中擁有的 CPU 核心總數。 一般而言,每個核心每秒可以讀取和寫入大約 3 MB。

將最大的 I/O 數據行除以叢集背景工作核心數目,然後將該資料分割為持續時間秒。 如果結果大約是 3 MB,則可能是 I/O 系結。 這會是高 I/O。

高輸入

如果您在階段中看到大量輸入,這表示您花了很多時間讀取數據。 首先,識別這個階段正在讀取的數據。 請參閱 識別 Spark DAG 中的昂貴讀取。

識別特定數據之後,以下是加速讀取的一些方法:

  • 使用 Delta
  • 嘗試 Photon。 它有助於閱讀速度很多,尤其是寬型數據表。
  • 讓您的查詢更具選擇性,因此不需要讀取太多數據。
  • 重新考慮您的數據配置 ,讓 略過 數據更有效率。
  • 如果您要多次讀取相同的數據,請使用 Delta 快取
  • 如果您要加入,請考慮嘗試讓 DFP 運作。

高輸出

如果您看到階段的輸出很多,這表示您花了很多時間寫入數據。 以下是解決此動作的一些方法:

高洗牌

如果您不熟悉隨機顯示,現在是學習的時候了。

沒有高 I/O

如果您在任何數據行中看不到高 I/O,則需要更深入地挖掘。 請參閱 使用小 I/O 的慢速 Spark 階段。