ApacheSpark3.0的重大功能有哪些

這篇文章將為大家詳細講解有關(guān)Apache Spark 3.0的重大功能有哪些,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關(guān)知識有一定的了解。

創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設(shè),龍馬潭企業(yè)網(wǎng)站建設(shè),龍馬潭品牌網(wǎng)站建設(shè),網(wǎng)站定制,龍馬潭網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,龍馬潭網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。

Apache  Spark  3.0 增加了很多令人興奮的新特性,包括動態(tài)分區(qū)修剪(Dynamic Partition Pruning)、自適應(yīng)查詢執(zhí)行(Adaptive Query Execution)、加速器感知調(diào)度(Accelerator-aware Scheduling)、支持 Catalog 的數(shù)據(jù)源API(Data Source API with Catalog Supports)、 Spark R 中的向量化(Vectorization in SparkR)、支持 Hadoop 3/JDK 11/Scala 2.12 等等。

Spark 3.0.0-preview 中主要特性和變化的完整列表請參閱 這里 。

Apache Spark 3.0的重大功能有哪些如果想及時了解Spark、

Spark 3.0 好像沒多少 Streaming/Structed Streaming 相關(guān)的 ISSUE,這可能有幾個原因:

  • 目前基于 Batch 模式的 Spark Streaming/Structed Streaming 能夠滿足企業(yè)大部分的需求,真正需要非常實時計算的應(yīng)用還是很少的,所以 Continuous Processing 模塊還處于試驗階段,還不急著畢業(yè);

  • 數(shù)磚應(yīng)該在大量投人開發(fā) Delta Lake 相關(guān)的東西,這個能夠企業(yè)帶來收入,目前這個才是他們的重點,所以自然開發(fā) Streaming 的投入少了。

動態(tài)分區(qū)修剪(Dynamic Partition Pruning)

所謂的動態(tài)分區(qū)裁剪就是基于運行時(run time)推斷出來的信息來進一步進行分區(qū)裁剪。舉個例子,我們有如下的查詢:

SELECT * FROM dim_iteblog

JOIN fact_iteblog

ON (dim_iteblog.partcol = fact_iteblog.partcol)

WHERE dim_iteblog.othercol > 10

假設(shè) dim_iteblog 表的 dim_iteblog.othercol > 10 過濾出來的數(shù)據(jù)比較少,但是由于之前版本的 Spark 無法進行動態(tài)計算代價,所以可能會導(dǎo)致 fact_iteblog 表掃描出大量無效的數(shù)據(jù)。有了動態(tài)分區(qū)裁減,可以在運行的時候過濾掉 fact_iteblog 表無用的數(shù)據(jù)。經(jīng)過這個優(yōu)化,查詢掃描的數(shù)據(jù)大大減少,性能提升了 33 倍。

這個特性對應(yīng)的 ISSUE 可以參見 SPARK-11150 和 SPARK-28888。

自適應(yīng)查詢執(zhí)行(Adaptive Query Execution)

自適應(yīng)查詢執(zhí)行(又稱 Adaptive Query Optimisation 或者 Adaptive Optimisation)是對查詢執(zhí)行計劃的優(yōu)化,允許 Spark Planner 在運行時執(zhí)行可選的執(zhí)行計劃,這些計劃將基于運行時統(tǒng)計數(shù)據(jù)進行優(yōu)化。

早在2015年,Spark 社區(qū)就提出了自適應(yīng)執(zhí)行的基本想法,在 Spark 的 DAGScheduler 中增加了提交單個 map stage 的接口,并且在實現(xiàn)運行時調(diào)整 shuffle partition 數(shù)量上做了嘗試。 但目前該實現(xiàn)有一定的局限性,在某些場景下會引入更多的 shuffle,即更多的 stage,對于三表在同一個 stage 中做 join 等情況也無法很好的處理; 而且使用當前框架很難靈活地在自適應(yīng)執(zhí)行中實現(xiàn)其他功能,例如更改執(zhí)行計劃或在運行時處理傾斜的 join。 所以該功能一直處于實驗階段,配置參數(shù)也沒有在官方文檔中提及。 這個想法主要來自英特爾以及百度的大牛,具體參見  SPARK-9850 。

而 Apache Spark 3.0 的 Adaptive Query Execution 是基于 SPARK-9850 的思想而實現(xiàn)的,具體參見 SPARK-23128。SPARK-23128 的目標是實現(xiàn)一個靈活的框架以在 Spark SQL 中執(zhí)行自適應(yīng)執(zhí)行,并支持在運行時更改 reducer 的數(shù)量。新的實現(xiàn)解決了前面討論的所有限制,其他功能(如更改 join 策略和處理傾斜 join)將作為單獨的功能實現(xiàn),并作為插件在后面版本提供。

加速器感知調(diào)度(Accelerator-aware Scheduling)

如今大數(shù)據(jù)和機器學(xué)習(xí)已經(jīng)有了很大的結(jié)合,在機器學(xué)習(xí)里面,因為計算迭代的時間可能會很長,開發(fā)人員一般會選擇使用 GPU、FPGA 或 TPU 來加速計算。在 Apache Hadoop 3.1 版本里面已經(jīng)開始內(nèi)置原生支持 GPU 和 FPGA 了。作為通用計算引擎的 Spark 肯定也不甘落后,來自 Databricks、NVIDIA、Google 以及阿里巴巴的工程師們正在為 Apache Spark 添加原生的 GPU 調(diào)度支持,該方案填補了 Spark 在 GPU 資源的任務(wù)調(diào)度方面的空白,有機地融合了大數(shù)據(jù)處理和 AI 應(yīng)用,擴展了 Spark 在深度學(xué)習(xí)、信號處理和各大數(shù)據(jù)應(yīng)用的應(yīng)用場景。這項工作的 issue 可以在 SPARK-24615 里面查看,相關(guān)的 SPIP(Spark Project Improvement Proposals) 文檔可以參見 SPIP: Accelerator-aware scheduling。

Apache Spark 3.0的重大功能有哪些

目前 Apache Spark 支持的資源管理器 YARN 和 Kubernetes 已經(jīng)支持了 GPU。為了讓 Spark 也支持 GPUs,在技術(shù)層面上需要做出兩個主要改變:

  • 在 cluster manager 層面上,需要升級 cluster managers 來支持 GPU。并且給用戶提供相關(guān) API,使得用戶可以控制 GPU 資源的使用和分配。

  • 在 Spark 內(nèi)部,需要在 scheduler 層面做出修改,使得 scheduler 可以在用戶 task 請求中識別 GPU 的需求,然后根據(jù) executor 上的 GPU 供給來完成分配。

因為讓 Apache Spark 支持 GPU 是一個比較大的特性,所以項目分為了幾個階段。 在 Apache Spark 3.0 版本,將支持在 standalone、 YARN 以及 Kubernetes 資源管理器下支持 GPU,并且對現(xiàn)有正常的作業(yè)基本沒影響。 對于 TPU 的支持、Mesos 資源管理器中 GPU 的支持、以及 Windows 平臺的 GPU 支持將不是這個版本的目標。 而且對于一張 GPU 卡內(nèi)的細粒度調(diào)度也不會在這個版本支持; Apache Spark 3.0 版本將把一張 GPU 卡和其內(nèi)存作為不可分割的單元。

Apache Spark DataSource V2

Data Source API 定義如何從存儲系統(tǒng)進行讀寫的相關(guān) API 接口,比如 Hadoop 的 InputFormat/OutputFormat,Hive 的 Serde 等。這些 API 非常適合用戶在 Spark 中使用 RDD 編程的時候使用。使用這些 API 進行編程雖然能夠解決我們的問題,但是對用戶來說使用成本還是挺高的,而且 Spark 也不能對其進行優(yōu)化。為了解決這些問題,Spark 1.3 版本開始引入了 Data Source API V1,通過這個 API 我們可以很方便的讀取各種來源的數(shù)據(jù),而且 Spark 使用 SQL 組件的一些優(yōu)化引擎對數(shù)據(jù)源的讀取進行優(yōu)化,比如列裁剪、過濾下推等等。

Data Source API V1 為我們抽象了一系列的接口,使用這些接口可以實現(xiàn)大部分的場景。 但是隨著使用的用戶增多,逐漸顯現(xiàn)出一些問題:

  • 部分接口依賴 SQLContext 和 DataFrame

  • 擴展能力有限,難以下推其他算子

  • 缺乏對列式存儲讀取的支持

  • 缺乏分區(qū)和排序信息

  • 寫操作不支持事務(wù)

  • 不支持流處理

為了解決 Data Source V1 的一些問題,從 Apache Spark 2.3.0 版本開始,社區(qū)引入了 Data Source API V2,在保留原有的功能之外,還解決了 Data Source API V1 存在的一些問題,比如不再依賴上層 API,擴展能力增強。 Data Source API V2 對應(yīng)的 ISSUE 可以參見  SPARK-15689 。 雖然這個功能在 Apache Spark 2.x 版本就出現(xiàn)了,但是不是很穩(wěn)定,所以社區(qū)對 Spark DataSource API V2 的穩(wěn)定性工作以及新功能分別開了兩個 ISSUE: SPARK-25186  以及  SPARK-22386 。 Spark DataSource API V2 最終穩(wěn)定版以及新功能將會隨著年底和 Apache Spark 3.0.0 版本一起發(fā)布,其也算是 Apache Spark 3.0.0 版本的一大新功能。

更好的 ANSI SQL 兼容

PostgreSQL 是最先進的開源數(shù)據(jù)庫之一,其支持 SQL:2011 的大部分主要特性,完全符合 SQL:2011 要求的 179 個功能中,PostgreSQL 至少符合 160 個。Spark 社區(qū)目前專門開了一個 ISSUE SPARK-27764 來解決 Spark SQL 和 PostgreSQL 之間的差異,包括功能特性補齊、Bug 修改等。功能補齊包括了支持 ANSI SQL 的一些函數(shù)、區(qū)分 SQL 保留關(guān)鍵字以及內(nèi)置函數(shù)等。這個 ISSUE 下面對應(yīng)了 231 個子 ISSUE,如果這部分的 ISSUE 都解決了,那么 Spark SQL 和 PostgreSQL 或者 ANSI SQL:2011 之間的差異更小了。

SparkR 向量化讀寫

Spark 是從 1.4 版本開始支持 R 語言的,但是那時候 Spark 和 R 進行交互的架構(gòu)圖如下:

Apache Spark 3.0的重大功能有哪些

每當我們使用 R 語言和 Spark 集群進行交互,需要經(jīng)過 JVM ,這也就無法避免數(shù)據(jù)的序列化和反序列化操作,這在數(shù)據(jù)量很大的情況下性能是十分低下的!

而且 Apache Spark 已經(jīng)在許多操作中進行了向量化優(yōu)化(vectorization optimization),例如,內(nèi)部列式格式(columnar format)、Parquet/ORC 向量化讀取、Pandas UDFs 等。向量化可以大大提高性能。SparkR 向量化允許用戶按原樣使用現(xiàn)有代碼,但是當他們執(zhí)行 R 本地函數(shù)或?qū)?Spark DataFrame 與 R DataFrame 互相轉(zhuǎn)換時,可以將性能提高大約數(shù)千倍。這項工作可以看下 SPARK-26759。

可以看出,SparkR 向量化是利用 Apache Arrow,其使得系統(tǒng)之間數(shù)據(jù)的交互變得很高效,而且避免了數(shù)據(jù)的序列化和反序列化的消耗,所以采用了這個之后,SparkR 和 Spark 交互的性能得到極大提升。

其他

  • Spark on K8S:Spark 對 Kubernetes 的支持是從2.3版本開始的,Spark 2.4 得到提升,Spark 3.0 將會加入 Kerberos 以及資源動態(tài)分配的支持。

  • Remote Shuffle Service:當前的 Shuffle 有很多問題,比如彈性差、對 NodeManager 有很大影響,不適應(yīng)云環(huán)境。為了解決上面問題,將會引入 Remote Shuffle Service,具體參見 SPARK-25299

  • 支持 JDK 11:參見 SPARK-24417,之所以直接選擇 JDK 11 是因為 JDK 8 即將達到 EOL(end of life),而 JDK9 和 JDK10 已經(jīng)是 EOL,所以社區(qū)就跳過 JDK9 和 JDK10 而直接支持 JDK11。不過 Spark 3.0 預(yù)覽版默認還是使用 JDK 1.8;

  • 移除對 Scala 2.11 的支持,默認支持 Scala 2.12,具體參見 SPARK-26132

  • 支持 Hadoop 3.2,具體參見 SPARK-23710,Hadoop 3.0 已經(jīng)發(fā)布了2年了(Apache Hadoop 3.0.0-beta1 正式發(fā)布,下一個版本(GA)即可在線上使用),所以支持 Hadoop 3.0 也是自然的,不過 Spark 3.0 預(yù)覽版默認還是使用 Hadoop 2.7.4。

關(guān)于Apache Spark 3.0的重大功能有哪些就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

新聞標題:ApacheSpark3.0的重大功能有哪些
網(wǎng)頁路徑:http://bm7419.com/article14/pcdede.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設(shè)網(wǎng)站維護、動態(tài)網(wǎng)站、標簽優(yōu)化網(wǎng)站設(shè)計、服務(wù)器托管

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站制作