2015-12-12 33 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中有更详细的描述。