我正在开发一个项目,我需要 在不同的 Spark 应用程序之间共享 执行状态。
我决定使用 apache-ignite 作为不同 Spark 应用程序之间的共享内存存储。
我正在考虑使用 嵌入式点燃模式,并在 spark 中使用静态分配
点燃节点将在 Spark 执行程序进程中启动。因此,任务将在存在数据的同一进程中执行。但是,这种模式是 弃用的 。
我可以使用独立的 Ignite 部署,但会有进程间通信来获取和保存我想要避免的状态。
有什么方法可以告诉 Spark 在已经存在的进程中创建它的执行程序(在本例中为 Ignite 节点进程)?
可以实现 ExternalClusterManager 来实现这一点吗?
Ignite 是否计划在 future 引入这种模式?
最佳答案
嗯,是的,你的大方向是合理的。可以说,Ignite 已弃用的嵌入式部署是“向后”嵌入的——当您将 Ignite 嵌入 Spark 时,它的效果很差,但如果我们将 Spark 嵌入到 Ignite 中,它会工作得更好。
是的,我认为可以实现。它甚至可能在 Ignite 之外实现。
我认为 Ignite backlog 中没有任何悬而未决的问题,但您可以在 Ignite dev mailing list 上分享您的建议。
现在是主要部分。 通过您的建议,您将实现的所有目标是用进程内替换进程间通信。通常,同一主机上的通信并不昂贵。您可能会从中看到一些性能提升,但只有在有确凿的证据表明这将解决实际问题的情况下,我才会开始实现。
关于apache-spark - Spark executors 可以在已经运行的 java 进程中产生吗(Ignite JVM),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53077834/