乙個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格式...