是否可以在已经运行的 java 进程中生成 Spark 执行程序(Ignite JVM)
Posted
技术标签:
【中文标题】是否可以在已经运行的 java 进程中生成 Spark 执行程序(Ignite JVM)【英文标题】:Can Spark executors be spawned in already running java process (Ignite JVM) 【发布时间】:2019-04-04 07:02:41 【问题描述】:我正在开展一个项目,我需要在不同的 spark 应用程序之间共享执行状态。
我决定使用 apache-ignite 作为不同 spark 应用程序之间的共享内存存储。
我正在考虑在 spark where 中使用 带有静态分配的嵌入式点火模式 点燃节点将在 Spark 执行程序进程中启动。这样,任务将在存在数据的同一进程中执行。但是,此模式已弃用。
我可以使用独立的 Ignite 部署,但会有进程间通信来获取和保存我想要避免的状态。
有没有办法告诉 Spark 在已经存在的进程(在本例中为 Ignite 节点进程)中创建其执行器?
可以实现 ExternalClusterManager 来实现这一点吗?
Ignite 是否计划在未来引入这种模式?
【问题讨论】:
【参考方案1】:嗯,是的,您的总体方向是合理的。可以说,Ignite 已弃用的嵌入式部署是“向后”嵌入的——当您将 Ignite 嵌入到 Spark 中时,它的效果很差,但如果我们将 Spark 嵌入到 Ignite 中,效果会更好。
是的,我认为可以实施。它甚至可以在 Ignite 之外实现。
我认为 Ignite backlog 中没有任何未解决的问题,但您可以在 Ignite dev mailing list 上分享您的建议。
现在是主要部分。您的建议将实现的所有目标都是用进程内替换进程间通信。通常,同一主机上的通信并不那么昂贵。您可能会从中看到一些性能提升,但如果有确凿的证据表明这将解决一个真正的问题,我只会实施它。
【讨论】:
以上是关于是否可以在已经运行的 java 进程中生成 Spark 执行程序(Ignite JVM)的主要内容,如果未能解决你的问题,请参考以下文章