2013-05-25 67 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% –

相關問題