我正在测试每个执行程序(--executor-cores
)的不同核心数对Spark上SVD的运行时间的影响。在--executor-cores
固定的情况下,主数据RDD的分区数量是变化的。但是,对于给定数量的RDD分区,不同--executor-cores
的SVD计算时间似乎没有显着变化。这有点令人困惑。
我的环境是:
Standalone
client
我已经为--executor-cores = [4, 16]
绘制了结果,并且可以看出,对于给定的分区大小,分区大小增加时的计算时间之间没有太大差异。所以我的问题是:
答案 0 :(得分:5)
通常,每个执行程序的最佳核心平衡因工作负载而异;虽然每个执行程序的核心数通常会减少每个执行程序的开销,但还有一些其他因素会影响性能反向每个执行程序的核心数量,主要是围绕流程全局共享资源和争用瓶颈:< / p>
另一方面,为每个执行程序添加更多内核的好处包括:
this Cloudera blog post解释了很多这些权衡和具体数字,特别是关于过大执行者的缺点。
对于少量分区,理论上分区数少于执行程序,只要任务分散到不同的执行程序中,性能应该与更大的执行程序更好或相等在每种情况下都很好。但是,如果任务的打包将它们全部放在一个执行程序上,那么它只取决于工作量;重复播放的东西可以从这样一个事实中受益,即所有进程都是本地的,但HDFS I / O重的东西会受到争用。