spark效能調優第一步,就是為任務分配更多的資源,在一定的範圍內,增加資源的分配與效能的提公升是成正比的。
資源的分配在使用指令碼提交spark任務時指定,標準的spark任務提交指令碼如下所示
/usr/opt/modules/spark/bin/spark-submit \
--class com.star.spark.stars\
--num-executors 80 \
--driver-memory 6g \
--executor-memory 6g \
--executor-cores 3 \
/usr/opt/modules/spark/jar/spark.jar \
名稱
說明
--num-executors
配置executor的數量
--driver-memory
配置driver記憶體(影響不大)
--executor-memory
配置每個executor的記憶體大小
--executor-cores
配置每個executor的cpu co調節
調節原則:盡量將任務分配的資源調節到可以使用資源的最大限度
對於具體資源的分配,我們分別討論spark的兩種cluster執行模式
1.standalone模式
在提交任務前,一定知道或者可以從運維部門獲取到你可以使用的資源情況,在編寫submit指令碼的時候,就根據可用的資源情況進行資源的分配,比如說集群有15臺機器,每台機器為8g記憶體,2個cpu core,那麼就指定15個executor,每個executor分配8g記憶體,2個cpu core。
2.yarn模式
由於yarn使用資源佇列進行資源的分配和排程,在表寫submit指令碼的時候,就根據spark作業要提交到的資源佇列,進行資源的分配,比如資源佇列有400g記憶體,100個cpu core,那麼指定50個executor,每個executor分配8g記憶體,2個cpu core。
名稱
解析
增加executor·個數
在資源允許的情況下,增加executor的個數可以提高執行task的並行度。比如有4個executor,每個executor有2個cpu core,那麼可以並行執行8個task,如果將executor的個數增加到8個(資源允許的情況下),那麼可以並行執行16個task,此時的並行能力提公升了一倍。
增加每個executor的cpu core個數
在資源允許的情況下,增加每個executor的cpu
core個數,可以提高執行task的並行度。比如有4個executor,每個executor有2個cpu core,那麼可以並行執行8個task,如果將每個executor的cpu core個數增加到4個(資源允許的情況下),那麼可以並行執行16個task,此時的並行能力提公升了一倍。
增加每個executor的記憶體量
在資源允許的情況下,增加每個executor的記憶體量以後,對效能的提公升有三點:
可以快取更多的資料(即對rdd進行cache),寫入磁碟的資料相應減少,甚至可以不寫入磁碟,減少了可能的磁碟io;
可以為shuffle操作提供更多記憶體,即有更多空間來存放reduce端拉取的資料,寫入磁碟的資料相應減少,甚至可以不寫入磁碟,減少了可能的磁碟io;
可以為task的執行提供更多記憶體,在task的執行過程中可能建立很多物件,記憶體較小時會引發頻繁的gc,增加記憶體後,可以避免頻繁的gc,提公升整體效能。
3.生產環境spark submit指令碼配置
/usr/local/spark/bin/spark-submit \
--class com.star.spark.wordcount \
--num-executors 80 \
--driver-memory 6g \
--executor-memory 6g \
--executor-cores 3 \
--master yarn-cluster \
--queue root.default \
--conf spark.yarn.executor.memoryoverhead=2048 \
--conf spark.core.connection.ack.wait.timeout=300 \
/usr/local/spark/spark.jar
名稱
數值
--num-executors
50-100
--driver-memory
1g-5g
--executor-memory
6g-10g
--executor-cores
--master實際生產環境一定要用yarn-cluster
spark常規效能調優一 最優資源配置
spark 效能調優的第一步,就是為任務分配更多的資源,在一定範圍內,增加資源的分配與效能的提公升是成正比的,實現了最優的資源配置後,在此基礎上再考慮進行後面論述的效能調優策略。資源的分配在使用指令碼提交spark任務時進行指定,標準的spark任務提交指令碼如 清單2 1所示 標準spark提交指...
spark 效能調優
核心調優引數如下 num executors executor memory executor cores driver memory spark.default.parallelizm spark.storage.memoryfraction spark.shuffle.memoryfractio...
Spark效能調優
日常工作使用spark處理業務問題中不可避免的都會碰到需要對spark的效能進行調優的情況,這裡就介紹一下對spark的效能調優。1.調節記憶體分配 因為在spark中堆記憶體被劃分為兩塊,一塊是給rdd的cache和persist操作rdd資料快取使用的,另一塊是給spark運算元函式使用的,函式...