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