每個數據科學家都應該知道的 5 種 Spark 優化技術

已發表: 2020-06-12

無論是小型初創公司還是大型公司,數據無處不在。 這些數據是從各種來源收集的,例如客戶日誌、辦公室賬單、成本表和員工數據庫。 公司收集和分析這些數據塊以確定模式和趨勢。 這些模式幫助他們為增強業務做出重要決策。

但是,這種數據分析和數字運算僅通過 Excel 表格是不可能的。 這就是數據處理軟件技術的用武之地。最快和廣泛使用的數據處理框架之一是 Apache Spark。 Spark 優化技術用於調整其性能以充分利用它。

我們稍後將了解這些技術。 讓我們圍繞這個軟件框架的基礎知識展開思考。

目錄

什麼是 Apache Spark?

Apache Spark 是世界著名的開源集群計算框架,用於處理公司中的海量數據集。 使用 Apache Spark 可以輕鬆處理這些龐大的數據集並將其分佈在多個系統中。 它提供了簡單的 API,使程序員和開發人員的生活變得輕鬆。

Spark 為 Python、R、Scala 和 Java 等編程語言提供本機綁定。 它支持機器學習、圖形處理和SQL 數據庫 由於這些驚人的好處,Spark 被用於銀行、科技公司、金融組織、電信部門和政府機構。 要了解有關 apache spark 的更多信息,請查看我們來自知名大學的數據科學課程。

Apache Spark 的架構

Apache Spark 的運行時架構由以下組件組成:

Spark 驅動程序或主進程

這會將程序轉換為任務,然後為執行程序(從屬進程)安排它們。 任務調度這些任務分發給執行者。

集群管理器

Spark 集群管理器負責啟動執行器和驅動程序。 它在集群的多個主機上調度和分配資源。

執行者

執行器,也稱為從屬進程,是執行作業任務的實體。 啟動後,它們會一直運行,直到 Spark 應用程序的生命週期結束。 如果 executor 失敗,Spark 作業的執行不會停止。

彈性分佈式數據集 (RDD)

這是一組不可變的數據集,分佈在 Spark 集群的節點上。 值得注意的是,集群是可以安裝 Spark 的分佈式系統的集合。 RDD 被分成多個分區。 而且,它們被稱為彈性,因為它們可以在數據失敗的情況下修復數據問題。

Spark 支持的 RDD 類型有:

  • Hadoop 分佈式文件系統上的文件構建的 Hadoop 數據集
  • 並行化集合,可以基於 Scala 集合

DAG(有向無環圖)

只要將代碼輸入 Spark 控制台,Spark 就會創建一個圖表。 如果觸發了某個動作(執行操作的指令),則將此圖提交給DAGScheduler

該圖可以被視為一系列數據操作。 DAG 由頂點和邊組成。 頂點表示一個 RDD,邊表示要在該特定 RDD 上執行的計算。 它被稱為有向圖,因為圖中沒有循環或循環。

火花優化技術

Spark優化技術用於修改Spark的設置和屬性,確保資源得到合理利用,作業快速執行。 所有這些最終都有助於有效地處理數據。

下面列出了最流行的Spark 優化技術:

1.數據序列化

在這裡,內存中的對像被轉換為另一種格式,可以存儲在文件中或通過網絡發送。 這提高了分佈式應用程序的性能。 序列化數據的兩種方式是:

  • 爪哇 序列ObjectOutputStream框架用於序列化對象。 java.io.Externalizable 可用於控制序列化的性能。 這個過程提供了輕量級的持久性。
  • Kyro 序列化——Spark 使用Kryo 序列化庫 (v4)來序列化對象,這比 Java 序列化更快,並且是一個更緊湊的過程。 為了提高性能,必須使用 registerKryoClasses 方法註冊類。

2.緩存

這是一種在更頻繁地需要數據時使用的有效技術。 Cache() 和 persist() 是該技術中使用的方法。 這些方法用於存儲 RDD、DataSet 和 DataFrame 的計算。 但是,cache() 將其存儲在內存中,persist() 將其存儲在用戶定義的存儲級別。

當使用重複計算時,這些方法可以幫助降低成本並節省時間。

閱讀: Apache PySpark 中的數據框:綜合教程

3.數據結構調優

我們可以通過調整某些可能會增加開銷的 Java 特性來減少使用 Spark 時的內存消耗。 這可以通過以下方式實現:

  • 使用枚舉對像或數字 ID 代替字符串作為鍵。
  • 避免使用大量對象和復雜的嵌套結構。
  • 如果內存大小小於 32 GB,請將 JVM 標誌設置為 xx:+UseCompressedOops。

4.垃圾回收優化

為了優化垃圾收集器,必須使用 G1 和 GC 來運行 Spark 應用程序。 G1 收集器管理不斷增長的堆。 根據生成的日誌進行 GC 調整是必不可少的,以控制應用程序的意外行為。 但在此之前,需要對程序的邏輯和代碼進行修改和優化。

G1GC 通過優化進程之間的暫停時間來幫助減少作業的執行時間。

5. 內存管理

用於存儲計算(例如連接、混洗、排序和聚合)的內存稱為執行內存。 存儲內存用於緩存和處理存儲在集群中的數據。 兩個內存都使用一個統一的區域 M。

當執行內存不使用時,存儲內存可以使用該空間。 同樣,當存儲內存空閒時,執行內存可以利用該空間。 這是最有效的Spark 優化技術之一

另請閱讀: Apache Spark 的 6 個改變遊戲規則的功能

結論

從各種Spark 優化技術中,我們可以了解它們如何幫助縮短處理時間並更快地處理數據。 開發人員和專業人員根據應用程序和相關數據量應用這些技術。

如果您想了解火花優化、數據科學,請查看 IIIT-B 和 upGrad 的數據科學執行 PG 計劃,該計劃專為在職專業人士創建,提供 10 多個案例研究和項目、實用的實踐研討會、行業指導專家,與行業導師一對一,400 多個小時的學習和頂級公司的工作協助。

什麼是 Spark 優化技術?

Apache Spark 讓企業可以輕鬆快速地處理數據,輕鬆解決複雜的數據問題。 顯然,在任何程序的開發過程中,關注其性能是非常重要的。 Spark 優化技術有助於內存數據計算。 唯一可以阻礙這些計算的是內存、CPU 或任何其他資源。

每種火花優化技術都用於不同的目的並執行某些特定的操作。 一些廣泛使用的火花優化技術是:

1.序列化
2.API選擇
3.提前變量
4.緩存和持久化
5.ByKey操作
6.文件格式選擇
7.垃圾收集調優
8. 並行度

什麼時候不應該考慮使用 Spark?

Apache Spark 有很多用例,但在某些特殊需求中,您需要其他大數據引擎來實現這一目的。 在這種情況下,建議使用其他技術而不是使用 Spark。 以下是不應考慮使用 Spark 的用例:

1. 計算能力低——Apache Spark 上的默認處理髮生在集群內存中。 如果您的虛擬機或集群的計算能力很小,您應該選擇其他替代方案,例如 Apache Hadoop。
2. 發布-訂閱模型中的數據攝取——在這種情況下,有多個來源和多個目的地,數百萬數據在短時間內被移動。 在這裡,您不應該使用 Spark,而應使用 Apache Kafka。

Pandas 比 Apache Spark 快嗎?

當您比較 Pandas DataFrame 和 Spark DataFrame 的計算速度時,您會注意到 Pandas DataFrame 的性能在小型數據集上略勝一籌。 另一方面,如果數據量增加,則發現 Spark DataFrame 的性能足以勝過 Pandas DataFrame。 因此,它將在很大程度上取決於數據量。