Spark 階段高 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 運作。
高輸出
如果您看到階段的輸出很多,這表示您花了很多時間寫入數據。 以下是解決此動作的一些方法:
- 您要重寫大量資料嗎? 請參閱 如何判斷 Spark 是否正在重寫數據 以檢查。 如果您要重寫大量資料:
- 如果尚未啟用 Photon,請啟用它。 Photon 可以説明很多寫入速度。
高洗牌
沒有高 I/O
如果您在任何數據行中看不到高 I/O,則需要更深入地挖掘。 請參閱 使用小 I/O 的慢速 Spark 階段。