spark 效能調優

2021-09-24 07:04:26 字數 1871 閱讀 7314

**: 

核心調優引數如下:

num-executors

executor-memory

executor-cores

driver-memory

spark.default.parallelizm

spark.storage.memoryfraction

spark.shuffle.memoryfraction

executor-memory:這個定義了每個 executor 的記憶體,它與 jvm oom 緊密相關,很多時候甚至決定了 spark 執行的效能。實際生產環境下建義是 8g 左右,很多時候 spark 執行在 yarn 上,記憶體佔用量不要超過 yarn 的記憶體資源的 50%。

executor-cores:決定了在 executors 中能夠並行執行的 tasks 的個數。實際生產環境下應該分配4個左右,一般情況下不要超過 yarn 佇列中 cores 總數量的 50%。

driver-memory:默應是 1g

spark.default.parallelizm:並行度問題,如果不設定這個引數,spark 會跟據 hdfs 中 block 的個數去設定這乙個數量,原理是默應每個 block 會對應乙個 task,默應情況下,如果資料量不是太多就不可以充份利用 executor 設定的資源,就會浪費了資源。建義設定為 100個,最好 700個左右。spark官方的建義是每乙個 core 負責 2-3 個 task。 

spark.storage.memoryfraction:默應占用 60%,如果計算比較依賴於歷史資料則可以調高該引數,當如果計算比較依賴 shuffle 的話則需要降低該比例。

spark.shuffle.memoryfraction:默應占用 20%,如果計算比較依賴 shuffle 的話則需要調高該比例。

採用 map 端的 join (rdd1 + rdd2 )先把乙個 rdd1的資料收集過來,然後再通過sc.broadcast( )把資料廣播到 executor 上;

如果進行批量插入資料到資料庫的話,建義採用foreachpartition( )

因為我們不希望有太多的資料碎片,所以能批量處理就盡量批量處理,你可以呼叫coalesce( ),把乙個更多的並行度的分片變得更少,假設有一萬個資料分片,想把它變得一百個,就可以使用 coalesce( )方法,一般在 filter( ) 運算元之後就會用 coalesce( ),這樣可以節省資源。

官方建義使用repartitionandsortwithpartitions( )

資料進行復用時一般都會進行持久化persisit( )

也建義使用 tree 開頭的運算元,比如說treereduce( )treeaggregrate( )

大資料必然要思考的核心效能問題不外乎 cpu 計算、記憶體管理、磁碟和網路io操作,這是無可避免的,但是可以基於這個基礎上進行優化,思考如何最優化的使用計算資源,思考如何在優化**,在**層面上防避墜入效能弱點;思考如何減少網路傳輸和思考如何最大程度的實現資料分布均衡。

在資源管理調優方面可以設定一些引數,比如num-executors、executor-memory、executor-cores、driver-memory、spark.default.parallelizm、spark.storage.memoryfraction、spark.shuffle.memoryfraction

Spark效能調優

日常工作使用spark處理業務問題中不可避免的都會碰到需要對spark的效能進行調優的情況,這裡就介紹一下對spark的效能調優。1.調節記憶體分配 因為在spark中堆記憶體被劃分為兩塊,一塊是給rdd的cache和persist操作rdd資料快取使用的,另一塊是給spark運算元函式使用的,函式...

Spark效能調優 JVM調優

通過一張圖讓你明白以下四個問題 1.jvm gc機制,堆記憶體的組成 2.spark的調優為什麼會和jvm的調優會有關聯?因為scala也是基於jvm執行的語言 3.spark中oom產生的原因 4.如何在jvm這個層面上來對spark進行調優 補充 spark程式執行時 jvm堆記憶體分配比例 r...

七 Spark效能調優 Shuffle 調優

目錄 一 調節 map 端緩衝區大小 二 調節 reduce 端拉取資料緩衝區大小 三 調節 reduce 端拉取資料重試次數 四 調節 reduce 端拉取資料等待間隔 五 調節 sortshuffle 排序操作閾值 val conf new sparkconf set spark.shuffle...