Spark:同时从具有不同内存/核心配置的单个 JVM 作业启动

2024-03-18

问题解释

假设您有带有独立管理器的 Spark 集群,其中作业通过SparkSession在客户端应用程序中创建。客户端应用程序在 JVM 上运行。为了提高性能,您必须使用不同的配置启动每个作业,请参阅职位类型示例 below.

问题是您无法从单个 JVM 创建两个会话 https://stackoverflow.com/questions/40153728/multiple-sparksessions-in-single-jvm.

那么如何同时启动具有不同会话配置的多个 Spark 作业呢?

通过不同的会话配置我的意思是:

  • spark.executor.cores
  • spark.executor.memory
  • spark.kryoserializer.buffer.max
  • spark.scheduler.pool
  • etc

我的想法

解决问题的可能方法:

  1. 为同一个 Spark 作业中的每个 Spark 作业设置不同的会话配置SparkSession. 是否可以?
  2. 启动另一个 JVM 只是为了启动另一个SparkSession,我可以称之为 Spark 会话服务。但你永远不知道将来会同时启动多少个具有不同配置的作业。目前 - 我一次只需要 2-3 个不同的配置。可能足够了,但不够灵活。
  3. 使用相同的配置为各种作业创建全局会话。但这种做法从性能角度来看是底部。
  4. 仅将 Spark 用于繁重的作业,并在 Spark 之外运行所有快速搜索任务。但这是一团糟,因为您需要让另一个解决方案(例如 Hazelcast)与 Spark 并行,并在它们之间分配资源。此外,这给所有人带来了额外的复杂性:部署、支持等。

职位类型示例

  1. 转储巨大的数据库任务。它的 CPU 低但 IO 密集型长时间运行任务。因此,您可能希望在每个执行器的内存和核心数较低的情况下启动尽可能多的执行器。
  2. 繁重的处理转储结果任务。它是 CPU 密集型的,因此您将在每台集群机器上启动一个执行程序,并具有最大的 CPU 和内核数。
  3. 快速检索数据任务,每台机器需要一个执行器和最少的资源。
  4. 介于 1-2 和 3 之间的值,其中作业应占用一半的集群资源。
  5. etc.

Spark 独立版为应用程序使用简单的 FIFO 调度程序。默认情况下,每个应用程序都使用集群中的所有可用节点。每个应用程序、每个用户或全局的节点数量可以受到限制。其他资源,例如内存、CPU 等可以通过应用程序的 SparkConf 对象进行控制。

Apache Mesos 有主进程和从属进程。主服务器向应用程序(在 Apache Mesos 中称为框架)提供资源,应用程序要么接受,要么不接受。因此,声明可用资源和运行作业是由应用程序本身决定的。 Apache Mesos 允许对系统中的资源(例如 CPU、内存、磁盘和端口)进行细粒度控制。 Apache Mesos 还提供对资源的粗粒度控制,其中 Spark 提前为每个执行器分配固定数量的 CPU,这些 CPU 直到应用程序退出时才会释放。请注意,在同一集群中,某些应用程序可以设置为使用细粒度控制,而其他应用程序则设置为使用粗粒度控制。

Apache Hadoop YARN 的 ResourceManager 包含两个部分:调度程序和应用程序管理器。调度程序是一个可插入组件。提供了两种实现:CapacityScheduler(在多个组织共享的集群中非常有用)和 FairScheduler(确保所有应用程序平均获得相同数量的资源)。两个调度程序都将应用程序分配到队列,每个队列获取在它们之间平等共享的资源。在队列中,资源在应用程序之间共享。 ApplicationsManager 负责接受作业提交并启动应用程序特定的ApplicationsMaster。在本例中,ApplicationsMaster 是 Spark 应用程序。在 Spark 应用程序中,资源在应用程序的 SparkConf 对象中指定。

对于您的独立情况,这是不可能的,可能有一些前提解决方案,但我还没有遇到过

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spark:同时从具有不同内存/核心配置的单个 JVM 作业启动 的相关文章

  • 如何将 javax.persistence.Column 定义为 Unsigned TINYINT?

    我正在基于 MySQL 数据库中的现有表创建 Java 持久性实体 Bean 使用 NetBeans IDE 8 0 1 我在这个表中遇到了一个字段 其类型为 无符号 TINYINT 3 我发现可以执行以下操作将列的类型定义为 unsign
  • 通过SOCKS代理连接Kafka

    我有一个在 AWS 上运行的 Kafka 集群 我想用标准连接到集群卡夫卡控制台消费者从我的应用程序服务器 应用程序服务器可以通过 SOCKS 代理访问互联网 无需身份验证 如何告诉 Kafka 客户端通过代理进行连接 我尝试了很多事情 包
  • 使用 GWT 读取非常大的本地 XML 文件

    我正在使用 GWT 构建我的第一个 Java 应用程序 它必须从一个非常大的 XML 文件中读取数据 当我尝试发送对文件中信息的请求时遇到问题 并且我不太确定它是否与文件的大小或我的语义有关 在我的程序中 我有以下内容 static fin
  • 从 PySpark RDD 中的每个组中取出前 N 个元素(不使用 groupByKey)

    我有一个如下所示的 RDD dataSource sc parallelize user1 3 blue user1 4 black user2 5 white user2 3 black user2 6 red user1 1 red 我
  • Web 组件 - 服务/非 html 组件

    所以我来自 Angular 想看看如何创建vanilla Web components 现在 从 Angular 开始 我们倾向于将事物分开 组件 充当 HTML CSS 和一些 javascript 然后是 服务 主要负责收集数据和执行不
  • 如何在代理后面安装 Eclipse Neon

    对于 Neon Eclipse 附带了一个安装程序 我在安装程序中找不到任何配置菜单 我的java版本是 java version java version 1 8 0 72 Java TM SE Runtime Environment b
  • 如何根据运行的 jar 的结果让我的 ant 任务通过或失败?

    我正在运行 CrossCheck 无浏览器 js 单元测试 作为 ant 脚本的一部分 如果 CrossCheck 测试失败 我希望 ant 报告失败 这是 build xml 中的相关部分
  • 来自十六进制代码的 Apache POI XSSFColor

    我想将单元格的前景色设置为十六进制代码中的给定颜色 例如 当我尝试将其设置为红色时 style setFillForegroundColor new XSSFColor Color decode FF0000 getIndexed 无论我在
  • 自动生成Flyway的迁移SQL

    当通过 Java 代码添加新模型 字段等时 JPA Hibernate 的自动模式生成是否可以生成新的 Flyway 迁移 捕获自动生成的 SQL 并将其直接保存到新的 Flyway 迁移中 以供审查 编辑 提交到项目存储库 这将很有用 预
  • 如何检测 Java 字符串中的 unicode 字符?

    假设我有一个包含 的字符串 我如何找到所有这些 un icode 字符 我应该测试他们的代码吗 我该怎么做呢 例如 给定字符串 A X 我想将其转换为 AYXY 我想对其他 unicode 字符做同样的事情 并且我不想将它们存储在某种翻译映
  • 如何避免 ArrayIndexOutOfBoundsException 或 IndexOutOfBoundsException? [复制]

    这个问题在这里已经有答案了 如果你的问题是我得到了java lang ArrayIndexOutOfBoundsException在我的代码中 我不明白为什么会发生这种情况 这意味着什么以及如何避免它 这应该是最全面的典范 https me
  • 读取电子邮件的文本文件转换为 Javamail MimeMessage

    我有一个电子邮件原始来源的文本文件 直接从 gmail 复制 如果您单击 查看原始文件 您就会看到它 我想读入该文件并将其转换为 MimeMessage 如果您好奇为什么 我设置了 JavaMaildir 并且需要用电子邮件填充它的收件箱以
  • 使用架构注册表对 avro 消息进行 Spring 云合约测试

    我正在查看 spring 文档和 spring github 我可以看到一些非常基本的内容examples https github com spring cloud samples spring cloud contract sample
  • java库维护数据库结构

    我的应用程序一直在开发 所以偶尔 当版本升级时 需要创建 更改 删除一些表 修改一些数据等 通常需要执行一些sql代码 是否有一个 Java 库可用于使我的数据库结构保持最新 通过分析类似 db structure version 信息并执
  • 使用布尔值进行冒泡排序以确定数组是否已排序

    我有以下用于冒泡排序的代码 但它根本不排序 如果我删除布尔值那么它工作正常 我知道 由于我的 a 0 小于所有其他元素 因此没有执行交换 任何人都可以帮助我解决这个问题 package com sample public class Bub
  • 是否可以使用 Java Guava 将函数应用于集合?

    我想使用 Guava 将函数应用于集合 地图等 基本上 我需要调整 a 的行和列的大小Table分别使所有行和列的大小相同 执行如下操作 Table
  • Spring-ws:如何从没有“Request”元素的 xsd 创建 Wsdl

    尝试为客户端实现 SOAP Web 服务 我需要一个 wsdl 文件来通过soapUI 测试该服务 但正如您在下面看到的 这个 xsd 没有 Request 和 Response 方法 所有请求和响应都被定义为基本 ServiceProvi
  • 将 Apache Camel 执行器指标发送到 Prometheus

    我正在尝试转发 添加 Actuator Camel 指标 actuator camelroutes 将交换 交易数量等指标 发送到 Prometheus Actuator 端点 有没有办法让我配置 Camel 将这些指标添加到 Promet
  • 洪水填充优化:尝试使用队列

    我正在尝试创建一种填充方法 该方法采用用户指定的初始坐标 检查字符 然后根据需要更改它 这样做之后 它会检查相邻的方块并重复该过程 经过一番研究 我遇到了洪水填充算法并尝试了该算法 它可以工作 但无法满足我对 250 x 250 个字符的数
  • Java EE 目录结构

    我对以下教程有疑问 http www mkyong com jsf2 jsf 2 internationalization example http www mkyong com jsf2 jsf 2 internationalizatio

随机推荐