gpt4 book ai didi

apache-spark - Spark standalone如何实现资源分配

转载 作者:行者123 更新时间:2023-12-04 04:02:21 24 4
gpt4 key购买 nike

一直在看Spark的源码,还是没搞明白Spark standalone是怎么实现资源隔离和分配的。例如 Mesos 使用 LXC 或 Docker 来实现资源限制的容器。那么Spark Standalone是如何实现的呢。比如我在一个executor上运行了10个线程,但是Spark只给了executor一个core,那么Spark是如何保证这10个线程只运行在一个cpu core上的。

在下面的测试代码之后,事实证明 Spark 独立资源分配在某种程度上是假的。我只有一个Worker(executor),只给了executor一个核(机器总共有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()
}
}

下面的问题:我很好奇,如果我在Spark+Mesos上运行上面的代码,会发生什么,Mesos会不会限制4个线程只在一个内核上运行。

最佳答案

but I still not be able to understand how does Spark standalone implement the resource isolation and allocation.

对于 Spark,我们有主节点和工作节点的表示法。我们可以把后者想象成一个资源池。每个工作人员都有它带到池中的 CPU 和 RAM,Spark 作业可以利用该池中的资源进行计算。

Spark Standalone 具有 Executor 的符号,这是处理计算的进程,我们从资源池中向其提供资源。在任何给定的执行器中,我们运行由不同任务组成的计算的不同阶段。现在,我们可以控制给定任务使用的计算能力(核心)数量(通过 spark.tasks.cpu 配置参数),我们还可以控制给定作业可能具有的一般计算能力(通过 spark.cores.max,它告诉集群管理器我们希望为正在运行的特定作业提供总共多少资源)。注意,Standalone 默认是 greety,会在集群中的每个 Worker 节点上调度一个 executor。通过使用 Dynamic Allocation,我们可以更细粒度地控制我们拥有多少实际执行器。 .

for example I ran 10 threads in one executor, but Spark only gave the executor one core, so how does Spark guarantee these 10 threads only run on one cpu core.

Spark 不会验证执行是否仅发生在单个内核上。 Spark 不知道它将从底层操作系统获得哪个 CPU 周期。 Spark Standalone 尝试做的是资源管理,它会告诉您“看,您有 X 个 CPU 和 Y 个 RAM,如果您没有正确划分资源,我不会让您安排作业”。

关于apache-spark - Spark standalone如何实现资源分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40821990/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com