使用Spark调用进程外dll函数

时间:2015-02-20 18:38:30

标签: c++ scala grid apache-spark zeromq

我们正在评估是否使用Spark来运行我们的网格计算,我们在特定用例方面遇到了一些麻烦。想知道社区是否有任何好主意。

我们在dll中有一个广泛的C ++函数库,我们需要在整个网格中使用它们。 C ++代码库很大,不是特别稳定(经常崩溃)并保持状态(线程不安全)。出于这个原因,dll需要在进程外生效。

为了解决这个问题,我们在dll周围构建了一个瘦的mq包装器和一个瘦scala零mq客户端来处理对dll的请求。我们可以将zeromq包装的dll分发给网格中的所有节点。

我的问题是:是否可以使用Spark来处理这种情况?如何在RDD.map()调用中调用zeromq scala客户端?如何在网格上处理?我们需要序列化zeromq客户端吗?

任何想法都非常感激:)

2 个答案:

答案 0 :(得分:1)

您可能希望在每个节点上运行自定义服务器的实例。然后,您可以为每个分区创建一个新客户端。您可以使用RDD.map代替RDD.mapPartitions,而不是rdd.mapPartitions { it => val client = new MyClient("localhost:2345") it.map(x => client.calculate(x)) }

{{1}}

答案 1 :(得分:1)

RDD.pipe与面向行的包装器一起使用可能会满足您的需求。你的问题并没有完全明确约束是什么,特别是关于图书馆中的州。