gpt4 book ai didi

database - Spark : run InputFormat as singleton

转载 作者:可可西里 更新时间:2023-11-01 14:09:28 24 4
gpt4 key购买 nike

我正在尝试将键值数据库集成到 Spark 中并有一些问题。我是 Spark 初学者,阅读了很多书并运行了一些示例,但什么也没有复杂。

场景:

我正在使用小型 hdfs 集群将传入消息存储在数据库中。集群有 5 个节点,数据被拆分为 5 个分区。每个分区存储在单独的数据库文件中。因此每个节点都可以处理它自己的数据分区。

问题:

数据库软件的接口(interface)基于JNI,数据库本身是在 C 中实现。由于技术原因,数据库软件可以维护一次只有一个事件连接。只能有一个 JVM 进程已连接到数据库。

由于这个限制,读取和写入数据库必须去通过相同的 JVM 进程。

(背景信息:数据库嵌入到流程中。它是基于文件的,并且一次只能有一个进程打开它。我可以让它在单独的环境中运行过程,但由于 IPC 开销,这会更慢。我的应用程序将执行许多全表扫描。额外的写入将被批处理并且是不是时间关键。)

解决方案:

我脑子里有一些解决这个问题的想法,但我不知道它们是否有效与 Spark 搭配得很好。

  • 也许可以神奇地将 Spark 配置为只有一个我的实例每个节点专有的 InputFormat。

  • 如果我的 InputFormat 是第一次使用,它会启动一个单独的线程这将创建数据库连接。然后这个线程将继续作为守护进程,只要 JVM 存在,它就会存在。这只会工作如果每个节点只有一个 JVM。如果 Spark 在同一个节点,那么每个节点都会启动自己的数据库线程,这不会工作。

  • 将我的数据库连接移动到每个节点的单独 JVM 进程,以及我的InputFormat 然后使用 IPC 连接到这个进程。正如我所说,我想避免这种情况。

  • 或者您有其他更好的主意?

我最喜欢的解决方案是#1,紧随其后的是#2。

感谢您的任何评论和回答!

最佳答案

我认为这里最好的选择是从驱动程序而不是执行程序连接到您的数据库。无论如何,系统的这一部分将成为瓶颈。

关于database - Spark : run InputFormat as singleton,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26654729/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com