簡體   English   中英

如何計算 Spark 作業中的內核數、執行器數、內存量

[英]How to calculate No of cores,executors, amount of memory in Spark Job

有人能幫我在 spark.js 中找到內核、執行器、內存等的數量嗎?

我正在使用開源 apache spark 集群

以下是我的配置 -

Total 6 nodes(1 master and 5 slaves). 
32GB per node
16 vCPUS per node

注意 - 似乎主節點沒有參與計算,這就是集群設置的方式。

--driver-memory = ?

--executor-memory =? 

--executor-cores =?

--num-executors =?

讓我根據以下配置幫你回答

在 Yarn 中運行的 Spark 應用程序的執行器、內核和內存分布:

現在,讓我們考慮具有以下配置的 10 節點集群,並分析執行程序核心內存分布的不同可能性:

  • 集群配置:

10 個節點每個節點 16 個核心每個節點 64GB RAM

  • 第一種方法:

Tiny executors [每個內核一個 Executor]:Tiny executor 本質上是指每個內核一個 executor。 下表描述了使用這種方法的 spar-config 參數的值:

  • --num-executors = 在這種方法中,我們將為每個核心分配一個執行器 = total-cores-in-cluster = num-cores-per-node * total-nodes-in-cluster = 16 x 10 = 160
  • --executor-cores = 1(每個內核一個執行器)
  • --executor-memory = 每個 executor 的內存量 = mem-per-node/num-executors-per-node = 64GB/16 = 4GB 分析:每個核心只有一個 executor,正如我們上面討論的,我們不會能夠利用在同一個 JVM 中運行多個任務的優勢。 此外,廣播變量和累加器等共享/緩存變量將在節點的每個核心中復制 16 次。 此外,我們沒有為 Hadoop/Yarn 守護進程留下足夠的內存開銷,並且我們沒有在 ApplicationManager 中計算。 不好!
  • 第二種方法:

Fat executors(每個節點一個 Executor):Fat executors 本質上是指每個節點一個 executor。 下表描述了使用這種方法的 spark-config 參數的值:

  • --num-executors = 在這種方法中,我們將為每個節點分配一個執行程序 = total-nodes-in-cluster = 10
  • --executor-cores = 每個節點一個 executor 意味着節點的所有核心都分配給一個 executor = total-cores-in-a-node = 16
  • --executor-memory = 每個 executor 的內存量 = mem-per-node/num-executors-per-node = 64GB/1 = 64GB 分析:對於每個 executor 的所有 16 個內核,除了 ApplicationManager 和守護進程不計入,HDFS 吞吐量會受到影響,並且會導致過多的垃圾結果。 另外,不好!
  • 第三種方法:

Fat (vs) Tiny 之間的平衡根據我們上面討論的建議:

根據上面提到的建議,讓我們為每個執行程序分配 5 個內核 => --executor-cores = 5(為了獲得良好的 HDFS 吞吐量)

為 Hadoop/Yarn 守護進程保留每個節點 1 個內核 => 每個節點可用的內核數 = 16-1 = 15

因此,集群中可用的內核總數 = 15 x 10 = 150

可用執行器的數量 =(總核心數/每個執行器的核心數)= 150/5 = 30

為 ApplicationManager 留下 1 個執行程序 => --num-executors = 29

每個節點的執行者數量 = 30/10 = 3

每個執行器的內存 = 64GB/3 = 21GB

計算堆開銷 = 21GB 的 7% = 3GB。 所以,實際 --executor-memory = 21 - 3 = 18GB

所以,推薦的配置是:29 個 executor,每個 18GB 內存,每個 5 個內核!!

分析:很明顯,這第三種方法如何在 Fat 與 Tiny 方法之間找到正確的平衡。 不用說,它實現了胖執行器的並行性和小執行器的最佳吞吐量!!

結論:我們已經看到:

需要記住的一些建議是為 spark 應用程序配置這些參數,例如: Yarn 應用程序管理器需要的資源預算 我們應該如何為 Hadoop/Yarn/OS 守護進程保留一些內核 了解了 spark-yarn-memory-用法 此外,檢查並分析了配置這些參數的三種不同方法: Tiny Executors - 每個核心 Fat Executors 一個 Executor - 每個節點一個 executor 推薦方法 - Tiny (Vs) Fat 與建議之間的正確平衡。 --num-executors、--executor-cores 和 --executor-memory.. 這三個參數在 Spark 性能中起着非常重要的作用,因為它們控制 Spark 應用程序獲得的 CPU 和內存量。 這使得用戶了解配置它們的正確方法非常重要。 希望這個博客能幫助你獲得這個觀點

詳細分析見以下鏈接https://spoddutur.github.io/spark-notes/distribution_of_executors_cores_and_memory_for_spark_application.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM