Spark在具有多个应用程序的worker上运行了多少个JVM

时间:2017-05-17 10:00:53

标签: java scala apache-spark

我正在使用Spark + Standalone群集管理器。我有5个工作节点,每个工作节点有2个内核和14 GB的RAM。

你能不能帮我弄清楚JVMs Spark会在工作节点上启动多少?

用例1

1)我用configs启动应用程序/会话

spark.executor.cores=2 
spark.executor.memory=10GB

此时Spark会在每个工作节点上启动一个执行程序的JVM,对吗?

2)在第一个会话进行配置

之前,我开始另一个Spark应用程序/会话
spark.executor.cores=2
spark.executor.memory=4GB

此时每个工作节点上有两个JVM,对吗?

用例2

我用configs启动应用程序/会话:

sstsp.spark.shuffle.service.enabled=true
sstsp.spark.dynamicAllocation.enabled=true
sstsp.spark.dynamicAllocation.maxExecutors=35
sstsp.spark.executor.cores=2
sstsp.spark.executor.memory=2GB

这意味着每个工作节点将启动7个执行器(JVM),每个2 GB RAM,对吗?

P.S。

JVM的开销有多大?我的意思是在用例2 中,不会将多少RAM用于计算目的,其中节点的RAM在7个JVM之间划分?

1 个答案:

答案 0 :(得分:1)

正如您所提到的,每个工作节点都有2个内核,因此通过设置executor cores = 2意味着每个工作节点只有1个执行器。

用例1

1)5个工作节点= 5个执行器

2)5个工作节点= 5个执行器(基于可用性)

用例2

如果你有执行者核心= 2个最大执行者将是每个工作者节点5个,1个执行者。

要在计算机上启动多个执行程序,您可以启动多个独立工作程序,每个工作程序都有自己的JVM。如果这个JVM进程有足够的核心,它会引入不必要的开销。

如果您在内存丰富的节点上以独立模式运行Spark,那么在同一节点上拥有多个工作组实例与非常大的堆大小有两个缺点是有益的:

Mesos和YARN可以开箱即用,支持将多个较小的执行程序打包到同一个物理主机上,因此请求较小的执行程序并不意味着您的应用程序将拥有较少的总体资源。