java - Spark 在具有多个应用程序的工作线程上运行了多少个 JVM

标签 java scala apache-spark

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

如何计算 Spark 将在工作节点上启动多少 JVM?

用例 1

  1. 我使用配置启动应用程序/ session

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

    此时 Spark 在每个工作节点上启动一个执行器的 JVM,对吧?

  2. 然后,在第一个 session 进行配置之前启动另一个 Spark 应用程序/ session

    spark.executor.cores=2 Spark.executor.memory=4GB

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

用例 2

我使用配置启动应用程序/ session :

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,对吧?

附注

JVM 的开销有多大?我的意思是,在用例 2 中,节点的 RAM 被分配给 7 个 JVM 时,有多少 RAM 不会用于计算目的?

最佳答案

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

用例 1

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

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

用例 2

只要您有执行程序 core=2,最大执行程序将为 5 个,每个工作节点有 1 个执行程序。

要在一台机器上启动多个执行程序,您需要启动多个独立的工作线程,每个工作线程都有自己的 JVM。如果该工作线程上有足够的内核,它会由于这些 JVM 进程而引入不必要的开销。

如果您在内存丰富的节点上以独立模式运行 Spark,则在同一节点上拥有多个工作实例可能会很有好处,因为非常大的堆大小有两个缺点:

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

关于java - Spark 在具有多个应用程序的工作线程上运行了多少个 JVM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44021624/

相关文章:

Java整数转换为仅缺少额外00的2字节数组

scala - 将拆分与数据框一起使用时出现未找到错误

scala - CsvParser 不适用于缺少双引号的情况

elasticsearch - saveToEs( Elasticsearch Spark )添加作业但未开始

python - 执行顺序和缓存需求

java - 如何在以下上下文中调用其他包中同名的其他方法

java - 如何使用接口(interface)作为 map 的键

java - 通过凭证绑定(bind)插件读取存储在 Jenkins 上的临时属性文件

scala - "Distributive property"与无形

scala - Spring boot(使用 Scala)无法实例化 DataSource [未找到支持的 DataSource 类型]