《Spark效能優化技術研究綜述》學習筆記

2022-03-09 00:37:48 字數 3078 閱讀 3905

大資料平台的執行環境由於受到底層硬體、體系結構、作業系統、spark框架本身以及使用者編寫的應用程式等多層次的綜合影響。

如果不了解spark底層複雜的執行機制,就找不到效能瓶頸,也就無法優化。

使用者的driver程式通過action操作劃分job,有多少個action操作就有多少個job。job通過行動操作劃分,stage通過寬窄依賴劃分,task通過並行度劃分。

pig和hive都是基於mapreduce的上層封裝,已達到簡易使用mapreduce的作用。

開發原則優化比較困難,需要針對不同的場景採用不同的優化方案。可以了解等值連線演算法的改進。spark上的等值連線優化

spark的核心思想就是利用記憶體作為快取來實現不同階段的資料共享,加速程式的執行。一般對於記憶體的使用效率完全依賴於程式設計師編寫**的質量。

通過對記憶體行為的建模與分析以及對**的語義分析,實現記憶體策略的自動化。排程器可以識別有價值的rdd放入快取,根據rdd大小和權重計算,進行操作順序的優化重拍。使用別的替換演算法替代原有的lru演算法及多級快取模型。通過以上兩點優化。

集群計算引擎spark中的記憶體優化研究與實現

spark中共有180個配置引數,使用者可以根據自己的需求合理的調整這些配置引數。配置引數對記憶體分配和使用率、io開銷等有很大的影響。

executor的記憶體主要分為3部分:

一部分供task執行使用者編寫的**,預設佔20%;(使用者記憶體)

一部分用於task通過shuffle過程去獲取乙個另乙個stage的輸出,然後進行聚合操作,預設20%;(執行記憶體)

最後一部分用於rdd持久化,預設60%。(儲存記憶體)

還有乙個保留記憶體,存放spark內部物件

所謂配置引數的優化,主要是在spark執行過程中各個使用資源位置調節預設配置引數,進而優化資源的使用率,提高spark作業的效能。

配置引數優化表

引數引數意義

調優建議

num-executors

executor程序數量

executor程序數量的多少直接影響程式的並行度,建議50-100個

executor-memory

executor程序記憶體

4-8gb

driver-memory

driver程序記憶體

若使用collect則要考慮增大,以防止記憶體溢位

executor-cores

每個程序占用的cpu core數量

一般2-4個,每個cpu core只能執行1個tas**程。cpu core數量越多,越能更快執行完分配的tas**程

driver-cores

driver占用的cpu core數量

核心數的多少對程式的並行執行有相當大的影響

spark.storage.memoryfraction

設定rdd持久化資料在executor記憶體的占用比

預設0.6,若有較多rdd持久化需要提高

一種spark平台效能自動優化方法將引數優化問題轉化為機器學習領域的分類問題,提出了一種二分類加多分類的多模型融合方法來實現引數的自動調優。

將基於hadoop mapreduce的排程進行基於spark特性的相似性改造,將改造後的優化方式應用於spark平台排程優化。可能會取得不錯的改進效果。

許多種基於mapreduce的排程優化。

通常從6個角度來評估排程策略:

資料本地化。任務排程時將資料本地化減小網路開銷

slot粘滯

傾斜問題,多數task執行快,少數task執行慢

餓死問題,採用不公平排程時,乙個task面臨不斷有優先順序更高的job出現

利用率公平性

基於異構spark集群的自適應任務排程策略hsats,該策略通過檢測節點的負載及資源利用率,分析得到的引數,自適應動態調節節點任務分配的權值,縮短了使用者作業的完成時間,提高了異構集群下的資源利用率與服務質量。

shuffle在執行過程中會遇到多種問題:

處理的資料量會很大,需要將tb、pb級的資料分散到數千的機器上

需要保證資料被存放在正確的partition中,由於資料大於記憶體,該階段會有資料從硬碟讀到記憶體中,這個過程會發生多次硬碟讀寫

資料在傳輸過程中,為了提高傳輸效率,會對資料壓縮處理,解壓又占用了大量時間

資料的序列化和反序列化也會影響spark作業的效能。

從三個方面對shuffle優化進行分析和總結。一、shuffle過程中發生資料傾斜時的解決方案。二、shuffle壓縮演算法的優化。三、shuffle記憶體優化。

資料傾斜的解決方案

shuffle過程中,經常發生資料傾斜問題。什麼是資料傾斜,作業在執行過程中,大部分節點的task執行完畢,部分節點task執行很慢,導致整個job執行時間延長。

資料傾斜的解決只能開發人員結合自身的開發經驗,針對不同的場景,選擇不同的方案,反覆實驗。比較難提出乙個可以全面優化的方案。

shuffle壓縮演算法的優化

shuffle記憶體優化

對shuffle記憶體優化是目前的研究熱點。

目前重點是shuffle file如何有效利用記憶體和記憶體排程兩方面

開發原則角度,根據不同業務場景,根據側重優化內容制定對應開發原則。通過資料庫和mapreduce的連線方法改進,結合到spark上。

從記憶體優化角度,節點之間,任務之間,無法實現記憶體共享。

配置引數優化角度,從系統執行資料資訊挖掘有用資訊後對其作出引數優化。嘗試將mapreduce運用到spark。

排程角度,基於mapreduce排程機制研究成果豐富,嘗試將其運用到spark平台上。對原有的fifo fair排程演算法改進。

shuffle過程角度。之前版本shuffle結果先儲存記憶體,會發生gc,後面新版本,shuffle中間結果寫入磁碟。生成乙個單獨檔案。但是太多小檔案,後門引入file consolidation合併小檔案為大檔案。

可以研究連線方式的改進,結合spark達到開發原則優化。配置引數優化,需要有乙個大系統,獲取系統資訊,來達到配置優化輔助。排程,結合mapreduce,如何修改排程,如何評估排程比較難。shuffle壓縮,可以有乙個壓縮策略,執行前獲得有效的最佳壓縮策略演算法。shuffle記憶體存在問題,作業不能分配到充分資源而一直等待。修改fair方式,採用別的方案。

技術研究思路以及Spark基礎學習筆記

養生主 前兩句話指出 吾生也有涯,而知也無涯。以有涯隨無涯,殆已!上面這句話說明了時間有限而知識無限的困局,而當代的資訊科技領域令人咂舌的技術更新速度進一步加重了這個問題。但我並不認同於這句話的後半部分,我們沒有可能學習人類全部的領域,也沒有這個必要,目前在人工智慧正在逐步奪走人類的工作技術是乙個不...

AOP技術研究 引言

1 引言 軟體設計因為引入物件導向思想而逐漸變得豐富起來。一切皆為物件 的精義,使得程式世界所要處理的邏輯簡化,開發者可以用一組物件以及這些物件之間的關係將軟體系統形象地表示出來。而從物件的定義,進而到模組,到元件的定義,利用物件導向思想的封裝 繼承 多型的思想,使得軟體系統開發可以向搭建房屋那樣,...

引擎技術研究之Shader技術

shader 技術屬於 gpu的渲染技術,其相應語言是高階著色器語言 high level shader language 簡稱hlsl hlsl 主要作用為將一些複雜的影象處理快速而又有效率地在顯示卡上完成。在 directx 中有兩種 shader 頂點著色器 vertex shader vs ...