2013-05-25 33 views
3

我在通过spark-ec2.sh脚本设置的EC2群集上运行Spark。我发布的5个slave实例有40个内核,但每个实例都不能使用所有的内核。EC2上的Spark不能利用所有可用的内核

从奴隶日志,我可以看到它似乎奴隶一个接一个地执行任务。而且我在slave实例上跑得最高,cpu大约是100%,而不是800%。

我打开了spark.mesos.coarse模式。数据被分成40个块。当我在本地运行独立模式下的Spark时,它可以使用8个内核。

有什么我可以做的,使火星奴隶利用所有可用的核心?

+0

'spark.mesos.coarse' Mesos下运行时只影响的火花。你是在Mesos下还是在Spark的独立模式下运行Spark(如果你使用Spark 0.7+,默认的EC2脚本使用独立模式)。 –

+0

谢谢@JoshRosen,为您及时回复。我使用0.7,所以它应该是独立模式。我想在1〜2秒内使用Spark实时查询响应时间。可能吗? –

+0

Spark肯定能够进行低延迟查询;这是Shark和Spark Streaming的基础。未充分利用可能是由于您的工作没有足够的平行性或由于局部性限制。你能提供一些关于你工作的更多细节吗?另外,请考虑在[spark-users](http://groups.google.com/group/spark-users)邮寄名单上发布此问题。该列表比StackOverflow更适合来回调试讨论。 –

回答

0

尝试设置spark.cores.max让我们来8说,在星火0.9创建SparkContext

前:

val conf = new SparkConf() 
    .setMaster("...") 
    .set("spark.cores.max", "8") 
val sc = new SparkContext(conf) 
+1

从顶部命令我可以看到多个核心正在使用。问题在于,似乎cpu需要一段时间才能充分参与到任务中。我的实时查询大约需要3〜4秒钟,但似乎ec2虚拟化不会立即为进程授予所有cpu的权力。 –

+0

你在不同的硬件上试过了吗? – Tombart

+0

我没有要使用的物理集群,所以没有。但是当我在本地计算机上进行操作时,CPU利用率立即变为100% –

相关问题