亚欧色一区w666天堂,色情一区二区三区免费看,少妇特黄A片一区二区三区,亚洲人成网站999久久久综合,国产av熟女一区二区三区

  • 發布文章
  • 消息中心
點贊
收藏
評論
分享
原創

spark執行查詢任務性能調優--資源&并行度

2024-04-30 07:32:48
11
0

1 調節資源

在生產環境中,提交spark作業時,用的spark-submit shell腳本,里面調整對應的參數:

/usr/local/spark/bin/spark-submit \

--class cn.spark.sparktest.core.WordCountCluster \

--num-executors 3 \  配置executor的數量

--driver-memory 100m \  配置driver的內存(影響不大)

--executor-memory 100m \  配置每個executor的內存大小

--total-executor-cores 3 \  配置所有executor的cpu core數量

/usr/local/SparkTest-0.0.1-SNAPSHOT-jar-with-dependencies.jar \

為什么多分配了這些資源以后,性能會得到提升?

  • 增加executor:

如果executor數量比較少,那么,能夠并行執行的task數量就比較少,就意味著,我們的Application的并行執行的能力就很弱。比如有3個executor,每個executor有2個cpu core,那么同時能夠并行執行的task,就是6個。6個執行完以后,再換下一批6個task。增加了executor數量以后,那么,就意味著,能夠并行執行的task數量,也就變多了。比如原先是6個,現在可能可以并行執行10個,甚至20個,100個。那么并行能力就比之前提升了數倍,數十倍。相應的,性能(執行的速度),也能提升數倍~數十倍。

  • 增加每個executor的cpu core,也是增加了執行的并行能力。原本20個executor,每個才2個cpu core。能夠并行執行的task數量,就是40個task。

現在每個executor的cpu core,增加到了4個。能夠并行執行的task數量,就是100個task。就物理性能來看,執行的速度,提升了2倍。

  • 增加每個executor的內存量。增加了內存量以后,對性能的提升,有三點:

a、如果需要對RDD進行cache,那么更多的內存,就可以緩存更多的數據,將更少的數據寫入磁盤,甚至不寫入磁盤。減少了磁盤IO。

b、對于shuffle操作,reduce端,會需要內存來存放拉取的數據并進行聚合。如果內存不夠,也會寫入磁盤。如果給executor分配更多內存以后,就有更少的數據,需要寫入磁盤,甚至不需要寫入磁盤。減少了磁盤IO,提升了性能。

c、對于task的執行,可能會創建很多對象。如果內存比較小,可能會頻繁導致JVM堆內存滿了,然后頻繁GC,垃圾回收,minor GC和full GC。(速度很慢)。內存加大以后,帶來更少的GC,垃圾回收,避免了速度變慢,速度變快了。

2 調節并行度

并行度的是Spark作業中,各個stage的task數量,代表了Spark作業的在各個階段(stage)的并行度。

  • 并行度過低會怎么樣?

比如現在spark-submit腳本里面,給我們的spark作業分配了足夠多的資源,比如50個executor,每個executor有10G內存,每個executor有3個cpu core。基本已經達到了集群或者yarn隊列的資源上限。task沒有設置,或者設置的很少,比如就設置了100個task,50個executor,每個executor有3個cpu core,也就是說,Application任何一個stage運行的時候,都有總數在150個cpu core,可以并行運行。但是現在,只有100個task,平均分配一下,每個executor分配到2個task,那么同時在運行的task,只有100個,每個executor只會并行運行2個task。每個executor剩下的一個cpu core, 就浪費掉了。

資源雖然分配足夠了,但并行度沒有與資源相匹配,導致分配下去的資源都浪費掉了。

合理的并行度的設置,應該是要設置的足夠大,大到可以完全合理的利用你的集群資源。比如上面的例子,總共集群有150個cpu core,可以并行運行150個task。那么就應該將你的Application的并行度,至少設置成150,才能完全有效的利用你的集群資源,讓150個task,并行執行。而且task增加到150個以后,即可以同時并行運行,還可以讓每個task要處理的數據量變少。比如總共150G的數據要處理,如果是100個task,每個task計算1.5G的數據,現在增加到150個task,可以并行運行,而且每個task主要處理1G的數據就可以。

合理設置并行度,可以完全充分利用集群計算資源,并且減少每個task要處理的數據量,最終,就是提升整個Spark作業的性能和運行速度。

  • 并行度的設置

1)task數量,至少設置成與Spark application的總cpu core數量相同(最理想情況,比如總共150個cpu core,分配了150個task,一起運行,差不多同一時間運行完畢)。

2)官方是推薦,task數量,設置成spark application總cpu core數量的2~3倍,比如150個cpu core,基本要設置task數量為300~500。

實際情況,與理想情況不同的,有些task會運行的快一點,比如50s就完了,有些task,可能會慢一點,要1分半才運行完,所以如果你的task數量,剛好設置的跟cpu core數量相同,可能還是會導致資源的浪費。比如150個task,10個先運行完了,剩余140個還在運行,但是這個時候,有10個cpu core就空閑出來了,就導致了浪費。那如果task數量設置成cpu core總數的2~3倍,那么一個task運行完了以后,另一個task馬上可以補上來,就盡量讓cpu core不要空閑,同時也是盡量提升spark作業運行的效率和速度,提升性能。

3)如何設置一個Spark Application的并行度?

spark.default.parallelism

SparkConf conf = new SparkConf().set("spark.default.parallelism", "500")

0條評論
作者已關閉評論
l****n
7文章數
0粉絲數
l****n
7 文章 | 0 粉絲
原創

spark執行查詢任務性能調優--資源&并行度

2024-04-30 07:32:48
11
0

1 調節資源

在生產環境中,提交spark作業時,用的spark-submit shell腳本,里面調整對應的參數:

/usr/local/spark/bin/spark-submit \

--class cn.spark.sparktest.core.WordCountCluster \

--num-executors 3 \  配置executor的數量

--driver-memory 100m \  配置driver的內存(影響不大)

--executor-memory 100m \  配置每個executor的內存大小

--total-executor-cores 3 \  配置所有executor的cpu core數量

/usr/local/SparkTest-0.0.1-SNAPSHOT-jar-with-dependencies.jar \

為什么多分配了這些資源以后,性能會得到提升?

  • 增加executor:

如果executor數量比較少,那么,能夠并行執行的task數量就比較少,就意味著,我們的Application的并行執行的能力就很弱。比如有3個executor,每個executor有2個cpu core,那么同時能夠并行執行的task,就是6個。6個執行完以后,再換下一批6個task。增加了executor數量以后,那么,就意味著,能夠并行執行的task數量,也就變多了。比如原先是6個,現在可能可以并行執行10個,甚至20個,100個。那么并行能力就比之前提升了數倍,數十倍。相應的,性能(執行的速度),也能提升數倍~數十倍。

  • 增加每個executor的cpu core,也是增加了執行的并行能力。原本20個executor,每個才2個cpu core。能夠并行執行的task數量,就是40個task。

現在每個executor的cpu core,增加到了4個。能夠并行執行的task數量,就是100個task。就物理性能來看,執行的速度,提升了2倍。

  • 增加每個executor的內存量。增加了內存量以后,對性能的提升,有三點:

a、如果需要對RDD進行cache,那么更多的內存,就可以緩存更多的數據,將更少的數據寫入磁盤,甚至不寫入磁盤。減少了磁盤IO。

b、對于shuffle操作,reduce端,會需要內存來存放拉取的數據并進行聚合。如果內存不夠,也會寫入磁盤。如果給executor分配更多內存以后,就有更少的數據,需要寫入磁盤,甚至不需要寫入磁盤。減少了磁盤IO,提升了性能。

c、對于task的執行,可能會創建很多對象。如果內存比較小,可能會頻繁導致JVM堆內存滿了,然后頻繁GC,垃圾回收,minor GC和full GC。(速度很慢)。內存加大以后,帶來更少的GC,垃圾回收,避免了速度變慢,速度變快了。

2 調節并行度

并行度的是Spark作業中,各個stage的task數量,代表了Spark作業的在各個階段(stage)的并行度。

  • 并行度過低會怎么樣?

比如現在spark-submit腳本里面,給我們的spark作業分配了足夠多的資源,比如50個executor,每個executor有10G內存,每個executor有3個cpu core。基本已經達到了集群或者yarn隊列的資源上限。task沒有設置,或者設置的很少,比如就設置了100個task,50個executor,每個executor有3個cpu core,也就是說,Application任何一個stage運行的時候,都有總數在150個cpu core,可以并行運行。但是現在,只有100個task,平均分配一下,每個executor分配到2個task,那么同時在運行的task,只有100個,每個executor只會并行運行2個task。每個executor剩下的一個cpu core, 就浪費掉了。

資源雖然分配足夠了,但并行度沒有與資源相匹配,導致分配下去的資源都浪費掉了。

合理的并行度的設置,應該是要設置的足夠大,大到可以完全合理的利用你的集群資源。比如上面的例子,總共集群有150個cpu core,可以并行運行150個task。那么就應該將你的Application的并行度,至少設置成150,才能完全有效的利用你的集群資源,讓150個task,并行執行。而且task增加到150個以后,即可以同時并行運行,還可以讓每個task要處理的數據量變少。比如總共150G的數據要處理,如果是100個task,每個task計算1.5G的數據,現在增加到150個task,可以并行運行,而且每個task主要處理1G的數據就可以。

合理設置并行度,可以完全充分利用集群計算資源,并且減少每個task要處理的數據量,最終,就是提升整個Spark作業的性能和運行速度。

  • 并行度的設置

1)task數量,至少設置成與Spark application的總cpu core數量相同(最理想情況,比如總共150個cpu core,分配了150個task,一起運行,差不多同一時間運行完畢)。

2)官方是推薦,task數量,設置成spark application總cpu core數量的2~3倍,比如150個cpu core,基本要設置task數量為300~500。

實際情況,與理想情況不同的,有些task會運行的快一點,比如50s就完了,有些task,可能會慢一點,要1分半才運行完,所以如果你的task數量,剛好設置的跟cpu core數量相同,可能還是會導致資源的浪費。比如150個task,10個先運行完了,剩余140個還在運行,但是這個時候,有10個cpu core就空閑出來了,就導致了浪費。那如果task數量設置成cpu core總數的2~3倍,那么一個task運行完了以后,另一個task馬上可以補上來,就盡量讓cpu core不要空閑,同時也是盡量提升spark作業運行的效率和速度,提升性能。

3)如何設置一個Spark Application的并行度?

spark.default.parallelism

SparkConf conf = new SparkConf().set("spark.default.parallelism", "500")

文章來自個人專欄
文章 | 訂閱
0條評論
作者已關閉評論
作者已關閉評論
0
0