經過七輪投票, Apache Spark 3.2 終于正式發布了。Apache Spark 3.2 已經是 Databricks Runtime 10.0 的一部分,感興趣的同學可以去試用一下。按照慣例,這個版本應該不是穩定版,所以建議大家不要在生產環境中使用。
Spark 的每月 Maven 下載數量迅速增長到 2000 萬,與去年同期相比,Spark 的月下載量翻了一番。Spark 已成為在單節點機器或集群上執行數據工程、數據科學和機器學習的最廣泛使用的引擎。
Spark 3.2 繼續以使 Spark 更加統一、簡單、快速和可擴展為目標,通過以下特性擴展其范圍:
?在 Apache Spark 上引入 panda API,統一小數據API和大數據API。
?完成 ANSI SQL 兼容模式,簡化 SQL 工作負載的遷移。
?自適應查詢執行產品化完成,以在運行時加速 Spark SQL。
?引入 RocksDB 狀態存儲以使狀態處理更具可擴展性。
在這篇博文中,我們總結了一些更高層次的特性和改進。請關注即將發布的深入研究這些特性的文章。有關所有 Spark 組件的主要功能和已解決的 JIRA 的完整列表,請參閱 Apache Spark 3.2.0 release notes
統一小數據 API 和大數據 API
Python 是 Spark 上使用最廣泛的語言。為了使 Spark 更具 Python 風格,Pandas API 被引入到 Spark,作為 Project Zen 的一部分(另請參閱 Data + AI Summit 2021 會議中的 Project Zen: Making Data Science Easier in PySpark 議題)。現在 pandas 的現有用戶可以通過一行更改來擴展他們的 pandas 應用程序。如下圖所示,得益于 Spark 引擎中的復雜優化,單節點機器 [左] 和多節點 Spark 集群 [右] 的性能都可以得到極大提升。
同時,Python 用戶還可以無縫利用 Spark 提供的統一分析功能,包括通過 SQL 查詢數據、流處理和可擴展機器學習 (ML)。新的 Pandas API 還提供了由 plotly 后端支持的交互式數據可視化。
簡化 SQL 遷移
添加了更多 ANSI SQL 功能(例如,支持 lateral join)。經過一年多的發展,本次發布的 ANSI SQL 兼容處于 GA 狀態。為了避免大量破壞行為的更改,默認情況下 spark.sql.ansi.enabled 依然是未啟用的。ANSI 模式包括以下主要行為更改:
?當 SQL 運算符/函數的輸入無效時,會拋出運行時錯誤,而不是返回為 null (SPARK-33275)。例如,算術運算中的整數值溢出錯誤,或將字符串轉換為數字/時間戳類型時的解析錯誤。
?標準化類型強制語法規則 (SPARK-34246)。新規則定義了給定數據類型的值是否可以基于數據類型優先級列表隱式提升為另一種數據類型,這比默認的非 ANSI 模式更直接。
?新的顯式轉換語法規則 (SPARK-33354)。當 Spark 查詢包含非法類型轉換(例如,日期/時間戳類型轉換為數字類型)時,會拋出編譯時錯誤,告知用戶轉換無效。
此版本還包括一些尚未完全完成的新計劃。例如,標準化 Spark 中的異常消息(SPARK-33539);引入 ANSI interval type (SPARK-27790) 并提高相關子查詢的覆蓋范圍 (SPARK-35553)。
在運行時加速 Spark SQL
此版本 (SPARK-33679) 中默認啟用自適應查詢執行 (AQE)。為了提高性能,AQE 可以根據在運行時收集的準確統計信息重新優化查詢執行計劃。在大數據中,維護和預先收集統計數據的成本很高。無論優化器有多先進,缺乏準確的統計信息通常會導致計劃效率低下。在這個版本中,AQE 與所有現有的查詢優化技術(例如,動態分區修剪,Dynamic Partition Pruning)完全兼容,以重新優化 JOIN 策略、傾斜 JOIN 和 shuffle分區合并。
小數據和大數據都應該在統一的數據分析系統中以高效的方式處理。短查詢性能也變得至關重要。當處理的數據量相當小時,在復雜查詢中編譯 Spark 查詢的開銷非常大。為了進一步降低查詢編譯延遲,Spark 3.2.0刪除了分析器/優化器規則(SPARK-35042、SPARK-35103) 中不必要的查詢計劃遍歷,并加快了新查詢計劃的構建 (SPARK-34989)。因此,與 Spark 3.1.2 相比,TPC-DS 查詢的編譯時間減少了 61%。
更可擴展的狀態處理流
Structured Streaming 中狀態存儲的默認實現是不可伸縮的,因為可以維護的狀態數量受執行器堆大小的限制。在此版本中,Databricks 為 Spark 社區基于 RocksDB 的狀態存儲實現做出了貢獻,該實現已在 Databricks 生產中使用了四年多。這種狀態存儲可以通過對鍵進行排序來避免完全掃描,并在不依賴于執行器堆大小的情況下從磁盤提供數據。
此外,狀態存儲 API 還包含用于前綴匹配掃描 (SPARK-35861) 的 API,以有效支持基于事件時間的會話 (SPARK-10816),允許用戶在 eventTime 上對會話窗口進行聚合。更多細節,請閱讀 Native support of session window in Apache Spark’s Structured Streaming 博文。
Spark 3.2 的其他更新
除了上面這些新功能外,這個版本還關注可用性、穩定性和功能加強,解決了大約 1700 個 JIRA tickets。這是 200 多名貢獻者貢獻的結果,包括個人和公司,如 Databricks,蘋果,Linkedin, Facebook,微軟,英特爾,阿里巴巴,英偉達,Netflix, Adobe 等。我們在這篇博文中重點介紹了 Spark 中的許多關鍵 SQL、Python 和流數據改進,但 3.2 里程碑中還有許多其他功能,包括代碼生成覆蓋率的改進和連接器的增強,您可以在版本中了解更多信息。
開始使用 Spark 3.2
如果您想在 Databricks Runtime 10.0 中試用 Apache Spark 3.2,請注冊 Databricks 社區版或 Databricks 試用版,這兩者都是免費的,并在幾分鐘內就可以使用。如果你想自己搭建的話,可以到 這里 下載。
本文翻譯自 《Introducing Apache Spark 3.2》:https://databricks.com/blog/2021/10/19/introducing-apache-spark-3-2.html
責任編輯:haq
-
數據
+關注
關注
8文章
6898瀏覽量
88834 -
API
+關注
關注
2文章
1486瀏覽量
61819
原文標題:Apache Spark 3.2 正式發布,新特性詳解
文章出處:【微信號:DBDevs,微信公眾號:數據分析與開發】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論