我正在尝试将一个键值数据库集成到Spark,并提出一些问题.
我是Spark初学者,读了很多,运行一些样本,但也没有
复杂.
我是Spark初学者,读了很多,运行一些样本,但也没有
复杂.
场景:
我正在使用一个小的hdfs集群将传入的消息存储在数据库中.
集群有5个节点,数据分为5个分区.每
分区存储在单独的数据库文件中.因此,每个节点可以处理
它自己分区的数据.
问题:
数据库软件的接口是基于JNI,数据库本身就是
由于技术原因,数据库软件可以维护
一次只有一个活动连接.只能有一个JVM进程
连接到数据库.
由于这个限制,读取和写入数据库必须走
通过相同的JVM进程.
(背景信息:数据库嵌入到进程中,它是基于文件的,
一次只能有一个进程打开它.我可以让它分开运行
过程,但是由于IPC开销会慢一些.我的应用程序
将执行许多全表扫描.额外的写入将被批量化
不是时间关键.)
解决方案:
我在脑海里有几个想法如何解决这个问题,但我不知道他们是否工作
好好跟Spark.
>也许有可能神奇地配置Spark只有一个我的实例
每个节点专有的InputFormat.
>如果我的第一次使用InputFormat,它将启动一个单独的线程
这将创建数据库连接.此线程将继续
作为一个守护进程,只要JVM生活就会活下去.这只会奏效
如果每个节点只有一个JVM.如果Spark启动了多个JVM
相同的节点然后每个都将启动自己的数据库线程,这不会
工作.
>将我的数据库连接移动到每个节点的单独的JVM进程,我的
InputFormat然后使用IPC连接到这个进程.正如我所说,我想避免这种情况.
或者也许你有另一个更好的主意?
我最喜欢的解决方案是#1,紧随其后的是#2.
感谢任何评论和答案!
解决方法
你是否想过排队(缓冲区),然后使用火花流排队并使用您的输出格式进行写入.