精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Blaze: 用Rust重寫(xiě)Spark執(zhí)行層,平均提升30%算力

jf_wN0SrCdH ? 來(lái)源:Rust語(yǔ)言中文社區(qū) ? 2023-11-22 17:46 ? 次閱讀

大家好,我是Tim。

前一段時(shí)間,快手?jǐn)?shù)據(jù)架構(gòu)團(tuán)隊(duì)開(kāi)源了Blaze項(xiàng)目,它是一個(gè)利用本機(jī)矢量化執(zhí)行來(lái)加速SparkSQL查詢(xún)處理的插件。

用通俗的話(huà)講就是通過(guò)使用Rust重寫(xiě)Spark物理執(zhí)行層來(lái)達(dá)到性能提升的目的。

并且在TPC-DS 1TB的所有測(cè)試中,Blaze相比Spark3.3減少了40%的計(jì)算時(shí)間,降低了近一半的集群資源開(kāi)銷(xiāo)。

此外,在快手內(nèi)部上線的數(shù)倉(cāng)生產(chǎn)作業(yè)也觀測(cè)到了平均30%的算力提升,實(shí)現(xiàn)了較大的降本增效。

1fa3d78c-7fe1-11ee-939d-92fbcf53809c.png

今天我們就來(lái)聊一聊這個(gè)Blaze,以及近來(lái)重寫(xiě)Spark執(zhí)行層進(jìn)行提效的諸多項(xiàng)目。

Spark填補(bǔ)了一個(gè)空白

在大數(shù)據(jù)建設(shè)的初期,單臺(tái)機(jī)器的 RAM 是有限且昂貴的,所以在進(jìn)行集群規(guī)模計(jì)算時(shí)唯一可行選擇是基于 MapReduce 的 Hadoop,它可以在諸多廉價(jià)的普通主機(jī)上進(jìn)行集群計(jì)算。

眾所周知,MapReduce 對(duì)磁盤(pán) IO 的負(fù)擔(dān)非常重,而且并沒(méi)有真正發(fā)揮所有 RAM 的價(jià)值。

隨著機(jī)器硬件的發(fā)展,RAM的價(jià)格也大幅降低,這時(shí)Spark提出了彈性分布式數(shù)據(jù)集(RDD),這是一種分布式內(nèi)存抽象,可以讓程序員以容錯(cuò)的方式在大型集群上執(zhí)行內(nèi)存計(jì)算。

Spark 完美地填補(bǔ)了這個(gè)空白。突然間,許多大數(shù)據(jù)處理都可以非常高效地完成。

為什么要重寫(xiě)Spark執(zhí)行層?

而隨著硬件技術(shù)的繼續(xù)發(fā)展,Spark也需要進(jìn)行相應(yīng)的優(yōu)化,來(lái)充分的發(fā)揮出底層硬件提供的能力。

以查詢(xún)計(jì)劃執(zhí)行為例。原有的Spark引擎執(zhí)行一個(gè)查詢(xún)計(jì)劃,往往采用火山模型的方式。

這種上層算子遞歸調(diào)用下層算子獲取并處理元組的方式,存在虛函數(shù)調(diào)用次數(shù)較多、指令或數(shù)據(jù)cache miss率高的缺陷,并且這種一次處理一個(gè)元組的方式無(wú)法使用CPUSIMD指令進(jìn)行優(yōu)化,從而造成查詢(xún)執(zhí)行效率低下的問(wèn)題。

向量化執(zhí)行就是解決上述問(wèn)題的一種有效手段

然而,我們都知道Spark是使用Scala寫(xiě)的,和JAVA類(lèi)似是運(yùn)行在JVM上的。

在Java中,與C++或Rust相比,沒(méi)有直接的手動(dòng)向量化特性,實(shí)現(xiàn)向量化都是由JVM自動(dòng)控制的。

例如,JVM會(huì)對(duì)循環(huán)進(jìn)行分析,判斷是否有類(lèi)似于向量化的優(yōu)化機(jī)會(huì)。

如果JVM發(fā)現(xiàn)某個(gè)循環(huán)中其計(jì)算次數(shù)大于一定量級(jí),且指令可以被SIMD指令集所支持,那么它會(huì)將循環(huán)展開(kāi)為并行操作,從而實(shí)現(xiàn)向量化執(zhí)行。

publicstaticvoidvectorAdd(float[]a,float[]b,float[]result){
for(inti=0;i200;i++){
result[i]=a[i]+b[i];
}
}

如上面的代碼所示,其有可能會(huì)被JVM轉(zhuǎn)換為向量化執(zhí)行。

即使循環(huán)符合向量化的條件,JVM也不能保證一定會(huì)自動(dòng)實(shí)現(xiàn)向量化執(zhí)行。在某些情況下,JVM可能會(huì)選擇跳過(guò)向量化執(zhí)行。

所以,到目前為止,Spark中的性能殺手Shuffle等操作依然采用了行式數(shù)據(jù)處理。

不過(guò)對(duì)于讀寫(xiě)列式文件的算子,如Parquet、Orc等,已經(jīng)實(shí)現(xiàn)了向量化的批量操作。

除此以外,Scala、Java實(shí)現(xiàn)的Spark還會(huì)帶來(lái)垃圾收集(GC)開(kāi)銷(xiāo),這也是JAVA系語(yǔ)言的通病。

如果垃圾回收的時(shí)間太長(zhǎng),會(huì)嚴(yán)重影響任務(wù)執(zhí)行的穩(wěn)定性,甚至?xí)徽`識(shí)別為節(jié)點(diǎn)失聯(lián)。

最后,Java還存在較高的內(nèi)存消耗和無(wú)法進(jìn)行低級(jí)別的系統(tǒng)優(yōu)化等問(wèn)題,這都迫使人們一直在嘗試重寫(xiě)Spark執(zhí)行層算子。

一直沒(méi)有開(kāi)源的Photon

其實(shí)對(duì)于重寫(xiě)Spark執(zhí)行層算子,Spark的母公司Databricks早已進(jìn)行了嘗試,并已經(jīng)為其付費(fèi)用戶(hù)提供了向量化的執(zhí)行引擎Photon。

Photon已經(jīng)被應(yīng)用多年,其被定位為適用于 Lakehouse 環(huán)境的矢量化查詢(xún)引擎。在Databricks的內(nèi)部數(shù)據(jù)上,Photon 已將一些客戶(hù)工作負(fù)載加速了 10 倍以上。

業(yè)界也一直有向量化執(zhí)行引擎出現(xiàn),例如velox、gluten(gluten可以支持velox或ck作為后端)。

velox就是一個(gè)單機(jī)/單節(jié)點(diǎn)的c++的向量化query runtime實(shí)現(xiàn)。

當(dāng)然velox目標(biāo)不只是Spark, 它希望統(tǒng)一替換大數(shù)據(jù)計(jì)算引擎的單節(jié)點(diǎn)runtime,包括Spark、Presto、Pytorch,以取得加速效果。

其對(duì)接Spark就是通過(guò)gluten項(xiàng)目進(jìn)行對(duì)接的,velox目前也已基本在Meta公司內(nèi)部落地。

但其開(kāi)源社區(qū)一直不溫不火,甚至涼涼。

Blaze 借助Arrow DataFusion實(shí)現(xiàn)向量化執(zhí)行引擎

Blaze的實(shí)現(xiàn)原理和Velox、Photon都是大同小異。

即在運(yùn)行時(shí)嘗試使用向量化算子計(jì)算,如果不支持則回退回Spark原來(lái)的計(jì)算算子。

不過(guò)需要注意的是,Blaze是將Spark運(yùn)行時(shí)物理運(yùn)算符轉(zhuǎn)換為 Rust DataFusion的向量化實(shí)現(xiàn)。

關(guān)于DataFusion是什么,可以參考這篇文章:Apache Arrow DataFusion到底是什么?

目前Blaze可能還不支持聚合運(yùn)算符,UDF 或 RDD API,這顯然會(huì)影響 TPC-DS 查詢(xún)的整體運(yùn)行時(shí)間。不過(guò),在快手內(nèi)部據(jù)傳Blaze中已經(jīng)添加了對(duì)聚合運(yùn)算符的支持。

在開(kāi)源的Blaze已支持Spark3.0和Spark3.3版本,其使用方式和gluten類(lèi)似,通過(guò)在Spark環(huán)境中添加相應(yīng)的Jar包實(shí)現(xiàn)功能擴(kuò)展。

目前從其跑的TPC-DS 查詢(xún)性能測(cè)試上可以看出,Blaze平均提升30%的性能,節(jié)約了40%的集群資源。

然而其問(wèn)題也和Velox一樣。

一方面需要在Spark集群環(huán)境中安裝特定版本的Rust/C++,而且Rust/C++在龐大的集群機(jī)器中可能會(huì)存在各種環(huán)境問(wèn)題。

另一方面,其不支持UDF(當(dāng)然Photon也不支持),在真實(shí)的計(jì)算任務(wù)中可能會(huì)存在各種兼容性問(wèn)題,而導(dǎo)致需要回退到原始的Spark執(zhí)行引擎上,可能會(huì)造成原始任務(wù)的性能倒退。

說(shuō)白了,即不可能全局開(kāi)啟Blaze性能優(yōu)化,目前也只能針對(duì)特定任務(wù)特點(diǎn)用戶(hù)進(jìn)行開(kāi)啟優(yōu)化。

Blaze引擎優(yōu)化定位只是針對(duì)Spark引擎,而且在向量化的實(shí)現(xiàn)上又是基于DataFusion開(kāi)源項(xiàng)目,相比Velox引擎其未來(lái)開(kāi)源的路可能會(huì)比較好走一點(diǎn),畢竟目標(biāo)沒(méi)那么大嘛。

當(dāng)然Blaze的出現(xiàn)還有一個(gè)作用,也許會(huì)迫使Databricks開(kāi)源他們藏掖已久的Photon,這當(dāng)然是一件好事。

就像當(dāng)年Iceberg迫使Databricks開(kāi)源其收費(fèi)的數(shù)據(jù)湖存儲(chǔ)引擎Delta Lake一樣。

總結(jié)

Spark執(zhí)行算子的向量化是未來(lái)必須要走的路,Blaze項(xiàng)目通過(guò)將Spark物理執(zhí)行層算子轉(zhuǎn)換為Rust Arrow DataFusion向量化算子來(lái)提升性能,目前已在快手內(nèi)部部分業(yè)務(wù)上線,并實(shí)現(xiàn)30%的性能提升。

在快手內(nèi)部的成功,并不一定可以在開(kāi)源社區(qū)獲得成功。

一方面,Spark社區(qū)并不會(huì)允許其并入Spark項(xiàng)目來(lái)獲得更大關(guān)注,另一方面這種優(yōu)化實(shí)現(xiàn)方式在真實(shí)重要的業(yè)務(wù)場(chǎng)景,必然存在很多自定義的函數(shù)或算子,這給其在其他公司數(shù)據(jù)團(tuán)隊(duì)上的落地造成了困難。

這可能需要數(shù)據(jù)團(tuán)隊(duì)具有不破不立的精神,否則其并不能帶來(lái)全平臺(tái)的性能收益,而這顯然會(huì)使得使用Blaze項(xiàng)目所需的成本項(xiàng)異常顯眼。

最后,希望Blaze項(xiàng)目可以成功,至少可以迫使Databricks開(kāi)源其Photon,也希望更多native引擎開(kāi)源來(lái)提升Spark任務(wù)執(zhí)行性能。



聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 磁盤(pán)
    +關(guān)注

    關(guān)注

    1

    文章

    366

    瀏覽量

    25176
  • SPARK
    +關(guān)注

    關(guān)注

    1

    文章

    105

    瀏覽量

    19875
  • Rust
    +關(guān)注

    關(guān)注

    1

    文章

    228

    瀏覽量

    6570

原文標(biāo)題:Blaze: 用Rust重寫(xiě)Spark執(zhí)行層,平均提升30%算力

文章出處:【微信號(hào):Rust語(yǔ)言中文社區(qū),微信公眾號(hào):Rust語(yǔ)言中文社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    ”的分層定義-初級(jí)

    ”(Computility,也被稱(chēng)為計(jì)算能力或計(jì)算)通常而言是指計(jì)算機(jī)、服務(wù)器、GPU或其他硬件設(shè)備執(zhí)行計(jì)算任務(wù)的速度和能力。
    的頭像 發(fā)表于 07-27 14:02 ?2791次閱讀
    “<b class='flag-5'>算</b><b class='flag-5'>力</b>”的分層定義-初級(jí)<b class='flag-5'>算</b><b class='flag-5'>力</b>

    大茉莉X16-P,5800M大稱(chēng)王稱(chēng)霸

    Rykj365
    發(fā)布于 :2024年01月25日 14:54:52

    Spark job是怎么被調(diào)度執(zhí)行

    Spark job 的執(zhí)行流程簡(jiǎn)介
    發(fā)表于 08-22 08:24

    基于RDMA技術(shù)的Spark Shuffle性能提升

    一篇文章教你使用RDMA技術(shù)提升Spark的Shuffle性能
    發(fā)表于 10-28 16:46

    rx580,rx580顯卡,rx588,rx588顯卡 精選資料分享

    約有差別,30Mh左右都是正常的無(wú)論是藍(lán)寶石,華碩,技嘉,銘瑄,迪蘭,訊景的580顯卡都是這個(gè)。〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓什么是熱錢(qián)包?熱錢(qián)包是指互聯(lián)網(wǎng)能夠訪問(wèn)你私鑰的錢(qián)包,熱
    發(fā)表于 07-23 06:59

    網(wǎng)絡(luò):和網(wǎng)絡(luò)的關(guān)系

    網(wǎng)絡(luò)的核心特征,是它通過(guò),實(shí)現(xiàn)了對(duì)資源、網(wǎng)絡(luò)資源的全面接管,可以讓網(wǎng)絡(luò)實(shí)時(shí)感知用戶(hù)的
    的頭像 發(fā)表于 12-14 16:09 ?4442次閱讀
    <b class='flag-5'>算</b><b class='flag-5'>力</b>網(wǎng)絡(luò):<b class='flag-5'>算</b><b class='flag-5'>力</b>和網(wǎng)絡(luò)的關(guān)系

    CloudflareRust重寫(xiě)Nginx C模塊,構(gòu)建沒(méi)有Nginx的未來(lái)

    近日,Cloudflare 工程師介紹了如何使用 Rust 重寫(xiě)基于 C 語(yǔ)言的 Nginx 模塊。Cloudflare 工程師在博客寫(xiě)道,他們 Rust 為 Cloudflare
    的頭像 發(fā)表于 03-08 09:36 ?690次閱讀

    Rust重寫(xiě)的LSP:KCL IDE 插件的功能介紹與設(shè)計(jì)解析

    在這次更新中,我們發(fā)布了全新的 KCL VS Code 插件,并且 Rust 重寫(xiě)了 LSP 的 Server 端。我們提供了 IDE 中常用的代碼輔助功能,如高亮、跳轉(zhuǎn)、補(bǔ)全、Outline、懸停、錯(cuò)誤提示等。
    的頭像 發(fā)表于 05-11 09:39 ?939次閱讀
    <b class='flag-5'>Rust</b><b class='flag-5'>重寫(xiě)</b>的LSP:KCL IDE 插件的功能介紹與設(shè)計(jì)解析

    Windows 11初嘗Rust,36000行內(nèi)核代碼已重寫(xiě)

    更早些時(shí)候,微軟 Rust 重寫(xiě)了 DirectWrite Core 庫(kù)的概念驗(yàn)證,它是 Windows 的 DWrite 引擎的 Windows App SDK 實(shí)現(xiàn),用于文本分析、布局和渲染
    的頭像 發(fā)表于 05-19 16:39 ?995次閱讀
    Windows 11初嘗<b class='flag-5'>Rust</b>,36000行內(nèi)核代碼已<b class='flag-5'>重寫(xiě)</b>!

    一體+Chiplet能否應(yīng)對(duì)AI大和高能耗的挑戰(zhàn)?

    十萬(wàn)京(=10^21)次的浮點(diǎn)運(yùn)算 ),與2020年相比提升30倍;到2030年,有望增至56ZFLOPS。翻倍時(shí)間在明顯縮短,大模型出現(xiàn)后,帶來(lái)了新的
    的頭像 發(fā)表于 05-22 09:36 ?711次閱讀
    存<b class='flag-5'>算</b>一體+Chiplet能否應(yīng)對(duì)AI大<b class='flag-5'>算</b><b class='flag-5'>力</b>和高能耗的挑戰(zhàn)?

    網(wǎng)絡(luò)的概念及整體架構(gòu)

    服務(wù)基于分布式微服務(wù)架構(gòu),支持應(yīng)用解構(gòu)成原子化功能 組件并組成算法庫(kù),由 API Gateway統(tǒng)一調(diào)度,實(shí)現(xiàn) 原子化算法按需實(shí)例 化。
    發(fā)表于 05-25 16:47 ?3次下載
    <b class='flag-5'>算</b><b class='flag-5'>力</b>網(wǎng)絡(luò)的概念及整體架構(gòu)

    RISC-V推動(dòng)中國(guó)移動(dòng)“泛在”演進(jìn)

    隨著社會(huì)智能化發(fā)展,需求不斷爆發(fā),一場(chǎng)由“集中到泛在”的革命已迫在眉睫。所謂“泛在”
    的頭像 發(fā)表于 03-06 10:46 ?763次閱讀
    RISC-V推動(dòng)中國(guó)移動(dòng)“<b class='flag-5'>算</b><b class='flag-5'>力</b>泛在”演進(jìn)

    阿里云倚天實(shí)例已為數(shù)千家企業(yè)提供,性?xún)r(jià)比提升30%

    在2023云棲大會(huì)上,阿里云宣布倚天ECS實(shí)例已服務(wù)數(shù)千家企業(yè),覆蓋電商、生命科學(xué)、交通物流及游戲等領(lǐng)域,整體性?xún)r(jià)比提升30%。 2022年,平頭哥自研云原生CPU倚天710在阿
    的頭像 發(fā)表于 11-03 11:25 ?806次閱讀
    阿里云倚天實(shí)例已為數(shù)千家企業(yè)提供<b class='flag-5'>算</b><b class='flag-5'>力</b>,性?xún)r(jià)比<b class='flag-5'>提升</b>超<b class='flag-5'>30</b>%

    一次Rust重寫(xiě)基礎(chǔ)軟件的實(shí)踐

    受到2022年“谷歌使用Rust重寫(xiě)Android系統(tǒng)且所有Rust代碼的內(nèi)存安全漏洞為零” [1] 的啟發(fā),最近筆者懷著濃厚的興趣也順應(yīng)Rust 的潮流,嘗試著將一款C語(yǔ)言開(kāi)發(fā)的基礎(chǔ)
    的頭像 發(fā)表于 01-25 11:21 ?595次閱讀

    的分類(lèi)與現(xiàn)代生活

    提升使得用戶(hù)能夠享受到更加流暢和豐富的數(shù)字體驗(yàn)。 個(gè)人通常指的是個(gè)人使用的計(jì)算設(shè)備,如智能手機(jī)、個(gè)人電腦、平板電腦等。這些設(shè)備通過(guò)中央處理器(CPU)和圖形處理器(GPU)等硬
    的頭像 發(fā)表于 08-26 15:05 ?170次閱讀
    <b class='flag-5'>算</b><b class='flag-5'>力</b>的分類(lèi)與現(xiàn)代生活