数据库 – Spark:运行InputFormat作为单例

我正在尝试将一个键值数据库集成到Spark,并提出一些问题.
我是Spark初学者,读了很多,运行一些样本,但也没有
复杂.

场景:

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

问题:

数据库软件的接口是基于JNI,数据库本身就是
由于技术原因,数据库软件可以维护
一次只有一个活动连接.只能有一个JVM进程
连接到数据库.

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

(背景信息:数据库嵌入到进程中,它是基于文件的,
一次只能有一个进程打开它.我可以让它分开运行
过程,但是由于IPC开销会慢一些.我的应用程序
将执行许多全表扫描.额外的写入将被批量化
不是时间关键.)

解决方案:

我在脑海里有几个想法如何解决这个问题,但我不知道他们是否工作
好好跟Spark.

>也许有可能神奇地配置Spark只有一个我的实例
每个节点专有的InputFormat.
>如果我的第一次使用InputFormat,它将启动一个单独的线程
这将创建数据库连接.此线程将继续
作为一个守护进程,只要JVM生活就会活下去.这只会奏效
如果每个节点只有一个JVM.如果Spark启动了多个JVM
相同的节点然后每个都将启动自己的数据库线程,这不会
工作.
>将我的数据库连接移动到每个节点的单独的JVM进程,我的
InputFormat然后使用IPC连接到这个进程.正如我所说,我想避免这种情况.
或者也许你有另一个更好的主意?

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

感谢任何评论和答案!

解决方法

你是否想过排队(缓冲区),然后使用火花流排队并使用您的输出格式进行写入.

相关文章

SELECT a.*,b.dp_name,c.pa_name,fm_name=(CASE WHEN a.fm_n...
if not exists(select name from syscolumns where name=&am...
select a.*,pano=a.pa_no,b.pa_name,f.dp_name,e.fw_state_n...
要在 SQL Server 2019 中设置定时自动重启,可以使用 Window...
您收到的错误消息表明数据库 'EastRiver' 的...
首先我需要查询出需要使用SQL Server Profiler跟踪的数据库标...