我一直在閱讀Spark的源代碼,但是我仍然無法理解Spark standalone如何實現資源隔離和分配。例如,Mesos使用LXC或Docker來實現資源限制的容器。那麼Spark Standalone如何實現這一點。例如我在一個執行程序中運行了10個線程,但Spark只給了執行程序一個核心,那麼Spark如何保證這10個線程只能在一個cpu核心上運行。Spark獨立如何實現資源分配
經過以下測試代碼,事實證明,Spark Standalone資源分配有點虛假。我只有一個Worker(執行器),只給執行器一個內核(該機器共有6個內核),當下面的代碼運行時,我發現有5個內核100%的使用。 (我的代碼拉開序幕4個線程)
object CoreTest {
class MyThread extends Thread {
override def run() {
while (true) {
val i = 1+1
}
}
}
def main(args: Array[String]) {
val conf = new SparkConf().setAppName("core test")
val sc = new SparkContext(conf)
val memRDD = sc.parallelize(Seq(1), 1)
memRDD.foreachPartition { part =>
part.foreach {
x =>
var hello = new MyThread()
hello.start
hello = new MyThread()
hello.start
hello = new MyThread()
hello.start
hello = new MyThread()
hello.start
while (true) {
val j = 1+2
Thread.sleep(1000)
}
}
}
sc.stop()
}
}
以下問題:我很好奇,如果我跑星火+ Mesos上面的代碼,會出現什麼情況,會Mesos限制4個線程只能在一個內核上運行。
謝謝Yuval,我在我的問題上寫了更多詳細信息 – Jack
@jack一般不建議您在提問後修改問題,並且人們會努力回答。也許考慮問一個新的問題。 –