執行資源優化配置

2021-08-15 14:52:49 字數 4946 閱讀 2488

乙個cpu core同一時間只能執行乙個執行緒。而每個executor程序上分配到的多個task,

都是以每個task一條執行緒的方式,多執行緒併發執行的

spark-submit \

--master spark://master1:7077 \  //spark的master位址

--class com.dyy.spark.wordcount \ //執行的jar包class

--num-executors 100 \ //整個executor的數量(yarn-only)

--executor-memory 6g \ //每乙個executor的記憶體

--executor-cores 4 \ //executor的cpu核數

--driver-memory 1 g \ //當前driver執行的cpu記憶體

--conf spark.default.parallelism=1000 \ //task的數量

--conf spark.storage.memoryfraction=0.5 \ //rdd快取空間的佔比

--conf spark.shuffle.memoryfraction=0.3 \ //rdd shuffle時快取空間的佔比

/home/spar/wordcount.jar \ //jar包的路徑

hdfs://master1:9000/wc \

hdfs://master1:9000/out

num-executors

引數說明

:該引數用於設定

spark

作業總共要用多少個

executor

程序來執行。

driver

在向yarn

集群管理器申請資源時,

yarn

集群管理器會盡可能按照你的設定來在集群的各個工作節點上,啟動相應數量的

executor

程序。這個引數非常之重要,如果不設定的話,預設只會給你啟動少量的

executor

程序,此時你的

spark

作業的執行速度是非常慢的。

引數調優建議

:每個spark

作業的執行一般設定

50~100

個左右的

executor

程序比較合適,設定太少或太多的

executor

程序都不好。設定的太少,無法充分利用集群資源;設定的太多的話,大部分佇列可能無法給予充分的資源。

executor-memory

引數說明:

該引數用於設定每個

executor

程序的記憶體。

executor

記憶體的大小,很多時候直接決定了

spark

作業的效能,而且跟常見的

jvm oom

異常,也有直接的關聯。

引數調優建議:

每個executor

程序的記憶體設定

4g~8g

較為合適。但是這只是乙個參考值,具體的設定還是得根據不同部門的資源佇列來定。可以看看自己團隊的資源佇列的最大記憶體限制是多少,

num-executors

乘以executor-memory

,是不能超過佇列的最大記憶體量的。此外,如果你是跟團隊裡其他人共享這個資源佇列,那麼申請的記憶體量最好不要超過資源佇列最大總記憶體的

1/3~1/2

,避免你自己的

spark

作業占用了佇列所有的資源,導致別的同事

的作業無法執行。

executor-cores

引數說明:

該引數用於設定每個

executor

程序的cpu core

數量。這個引數決定了每個

executor

程序並行執行

task

執行緒的能力。因為每個

cpu core

同一時間只能執行乙個

task

執行緒,因此每個

executor

程序的cpu core

數量越多,越能夠快速地執行完分配給自己的所有

task

執行緒。引數調優建議:

executor

的cpu core

數量設定為

2~4個較為合適。同樣得根據不同部門的資源佇列來定,可以看看自己的資源佇列的最大

cpu core

限制是多少,再依據設定的

executor

數量,來決定每個

executor

程序可以分配到幾個

cpu core

。同樣建議,如果是跟他人共享這個佇列,那麼

num-executors * executor-cores

不要超過佇列總

cpu core

的1/3~1/2

左右比較合適,也是避免影響其他同事

的作業執行。

driver-memory

引數說明:

該引數用於設定

driver

程序的記憶體。

引數調優建議:

driver

的記憶體通常來說不設定,或者設定

1g左右應該就夠了。唯一需要注意的一點是,如果需要使用

collect

運算元將rdd

的資料全部拉取到

driver

上進行處理,那麼必須確保

driver

的記憶體足夠大,否則會出現

oom記憶體溢位的問題。

spark.default.parallelism

引數說明:

該引數用於設定每個

stage

的預設task

數量,也可以認為是分割槽數

。這個引數極為重要,如果不設定可能會直接影響你的

spark

作業效能。

引數調優建議:

spark

作業的預設

task

數量為500~1000

個較為合適。很多同學常犯的乙個錯誤就是不去設定這個引數,那麼此時就會導致

spark

自己根據底層

hdfs

的block

數量來設定

task

的數量,預設是乙個

hdfsblock

對應乙個

task

。通常來說,

spark

預設設定的數量是偏少的(比如就幾十個

task

),如果

task

數量偏少的話,就會導致你前面設定好的

executor

的引數都前功盡棄。試想一下,無論你的

executor

程序有多少個,記憶體和

cpu有多大,但是

task只有1

個或者10

個,那麼

90%的

executor

程序可能根本就沒有

task

執行,也就是白白浪費了資源!因此

spark

官網建議的設定原則是,設定該引數為

num-executors* executor-cores

的2~3

倍較為合適,比如

executor

的總cpu core

數量為300

個,那麼設定

1000

個task

是可以的,此時可以充分地利用

spark

集群的資源。

spark.storage.memoryfraction

引數說明:

該引數用於設定

rdd持久化資料在

executor

記憶體中能佔的比例,預設是

0.6。也就是說,預設

executor 60%

的記憶體,可以用來儲存持久化的

rdd資料。根據你選擇的不同的持久化策略,如果記憶體不夠時,可能資料就不會持久化,或者資料會寫入磁碟。

引數調優建議:

如果spark

作業中,有較多的

rdd持久化操作,該引數的值可以適當提高一些,保證持久化的資料能夠容納在記憶體中。避免記憶體不夠快取所有的資料,導致資料只能寫入磁碟中,降低了效能。但是如果

spark

作業中的

shuffle

類操作比較多,而持久化操作比較少,那麼這個引數的值適當降低一些比較合適。此外,如果發現作業由於頻繁的

gc導致執行緩慢(通過

spark web

ui可以觀察到作業的

gc耗時),意味著

task

執行使用者**的記憶體不夠用,那麼同樣建議調低這個引數的值。

spark.shuffle.memoryfraction

引數說明:

該引數用於設定

shuffle

過程中乙個

task

拉取到上個

stage

的task

的輸出後,進行聚合操作時能夠使用的

executor

記憶體的比例,預設是

0.2。也就是說,

executor

預設只有

20%的記憶體用來進行該操作。

shuffle

操作在進行聚合時,如果發現使用的記憶體超出了這個

20%的限制,那麼多餘的資料就會溢寫到磁碟檔案中去,此時就會極大地降低效能。

引數調優建議:

如果spark

作業中的

rdd持久化操作較少,

shuffle

操作較多時,建議降低持久化操作的記憶體佔比,提高

shuffle

操作的記憶體佔比比例,避免

shuffle

過程中資料過多時記憶體不夠用,必須溢寫到磁碟上,降低了效能。此外,如果發現作業由於頻繁的

gc導致執行緩慢,意味著

task

執行使用者**的記憶體不夠用,那麼同樣建議調低這個引數的值。

nginx配置 優化靜態資源

開啟gzip功能,gzip就是對網路傳輸的資料進行壓縮處理,從而節省頻寬。開啟nginx.conf檔案,在http模組下增加gzip on 設定靜態資源的過期時間,在http模組的server模組下增加location js css location gif jpg jpeg png bmp swf...

靜態資源優化

1.js css壓縮,減少流量 將檔案中的空格無用字元去掉,只保留有效部分,可以減少檔案大小,但是可讀性很差。很多開源的js css提供兩個版本的檔案,乙個是壓縮版的,乙個是可正常閱讀版的。2.多個js css組合,減少連線數 專案比較複雜的時候會有很多js css檔案,可以將多個檔案合併,減少檔案...

Unity 資源優化

一 模型 匯入模型選項 import不需要的都不選 網格壓縮預設沒有,可以根據需要選擇壓縮層度 不會對網格寫入就不勾可讀寫 rig頁面 勾選optimize game object,骨骼節點合併了。動畫頁面,沒有動畫就不勾。有可以選動畫壓縮 但要注意壓縮關鍵幀會不會掉幀 二 紋理 不要匯出dds格式...