2015-12-12 37 views
0

配置spark工作時,我有時會看到有人建議每個執行器的內核數量大於內核總數除以執行器的數量。執行者可以在火花中共享核心嗎?

值得注意的是,在這個example以下是通過@ 0x0FFF建議:

--num-executors 4 --executor-memory 12g --executor-cores 4 

如果我們計算執行內核總數,我們得到4 cores per executor * 4 executors total = 16 cores total
但是,在問題的開頭部分,它說「我有一個NameNode和兩個DataNode,每個內存30GB,每個4個內核」。因此,核心總數爲2 worker nodes * 4 cores each = 8 cores

是否可以通過4 executors使用16 cores這個硬件?如果是這樣,怎麼樣?

+0

它更像是一個CPU內核如何與線程相關的問題,以及什麼是最佳配置。在這裏看到這可能會幫助你 - http://stackoverflow.com/questions/13834692/threads-configuration-based-on-no-of-cpu-cores – Sumit

+0

我沒有'HW'的背景,所以我很難理解你鏈接的那個問題。我只關心它如何與'spark'作業的配置相關。 「線程」與以下任何一個相關:「核心」,「執行者」,「節點」如何? – Sother

+1

據我所知,Spark會爲每個核心旋轉一個線程。所以如果一個執行者被賦予了2個內核,那麼這個執行者會旋轉2個線程並且並行運行2個任務。爲可執行程序分配更多內核將不會進行 - 至少不會在YARN上運行。我建議你從Cloudera閱讀這篇優秀的博客文章http://blog.cloudera.com/blog/2015/03/how-to-tune-your-apache-spark-jobs-part-2/ –

回答

0

因此,正如我在評論中所寫,Spark將爲每個核心旋轉一個線程,並且我知道對於YARN,您不能爲可執行程序分配更多的核心。如果你這樣做,它根本不會啓動這些執行者。這也在Cloudera的this blog post中有更詳細的描述。