首頁 >後端開發 >Python教學 >為什麼 Spark 慢?

為什麼 Spark 慢?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-11 19:43:11877瀏覽

為什麼 Spark 慢?

從一個引人注目的標題「Spark 為什麼這麼慢?」開始,值得注意的是,稱 Spark「慢」可能意味著多種含義。聚合速度慢嗎?資料加載?存在不同的情況。此外,「Spark」是一個廣泛的術語,其性能取決於程式語言和使用上下文等因素。因此,在深入討論之前,讓我們將標題改進得更加精確。

由於我主要在 Databricks 上使用 Spark 和 Python,因此我將進一步縮小範圍。

優化後的標題將是:

「Spark 的第一印象:『聽說它很快,但為什麼感覺很慢?』初學者的視角」


寫作動機(隨意的想法)

作為廣泛使用 pandas、NumPy 和機器學習庫的人,我欽佩 Spark 透過平行和分散式處理處理大數據的能力。當我終於在工作中使用 Spark 時,我對它看起來比 pandas 慢的場景感到困惑。不確定出了什麼問題,我發現了一些見解並想與大家分享。


你的火花什麼時候會變慢?

在進入主題之前

我們簡單介紹一下Spark的基本架構。

Why Is Spark Slow??

(群集模式概述)

Spark 叢集由執行實際處理的 工作節點和協調和計劃執行的驅動程式節點組成。這種架構會影響下面討論的所有內容,因此請記住這一點。

現在,進入重點。


1. 資料集不夠大

Spark 針對大規模資料處理進行了最佳化,但它也可以處理小型資料集。然而,看看這個基準:

Why Is Spark Slow??

(在單節點機器上對 Apache Spark 進行基準測試)

結果表明,對於 15GB 以下的資料集,pandas 在聚合任務中優於 Spark。為什麼?簡而言之,Spark 最佳化的開銷超過了小資料集的好處

此連結顯示了 Spark 並不慢的情況,但這些情況通常處於本地叢集模式。對於獨立設置,由於節點之間的網路通訊開銷,較小的資料集可能是缺點。

  • pandas:在一台機器上處理記憶體中的所有內容,無需網路或儲存 I/O。
  • Spark:使用 RDD(彈性分散式資料集),涉及 Workers 之間的網路通訊(如果分散式),並會在組織資料以進行平行處理時產生開銷。

2. 理解惰性求值

Spark 採用惰性求值,這表示轉換不會立即執行,而是延遲到某個操作(例如收集、計數、顯示)觸發計算為止。

範例(熊貓):

執行時間:3.04秒

Spark 中的等效項:

執行時間:3分鐘後仍在運作。


為什麼?

  1. 惰性求值:所有轉換都會排隊,並且僅在表演等動作期間執行。
  2. Driver 到 Worker 的通訊:收集和顯示等操作涉及從 Workers 到 Driver 的資料傳輸,導致延遲。

Spark 程式碼在 pandas 中有效地執行了此操作:

透過使用 Spark 的快取或重建邏輯以盡量減少重複計算來避免此類模式。


3. 注意隨機播放

https://spark.apache.org/docs/latest/rdd-programming-guide.html#shuffle-operations

隨機播放 當資料在 Workers 之間重新分配時發生,通常是在 groupByKey、join 或重新分區等操作期間。隨機播放可能會很慢,原因是:

  • 節點之間的網路通訊
  • 跨分區資料的全域排序與聚合

例如,擁有更多 Worker 並不總是能提高洗牌期間的效能。

  • 32GB x 8 Workers 可能比 64GB x 4 Workers 慢,因為較少的 Workers 會減少節點間通訊。

結論

您覺得這有幫助嗎?如果有效使用,Spark 是個出色的工具。除了加速大規模資料處理之外,Spark 還以其可擴展的資源管理而大放異彩,尤其是在雲端。

嘗試 Spark 來優化您的資料營運和管理!

以上是為什麼 Spark 慢?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn