我们正在评估是否使用Spark来运行我们的网格计算,我们在特定用例方面遇到了一些麻烦。想知道社区是否有任何好主意。
我们在dll中有一个广泛的C ++函数库,我们需要在整个网格中使用它们。 C ++代码库很大,不是特别稳定(经常崩溃)并保持状态(线程不安全)。出于这个原因,dll需要在进程外生效。
为了解决这个问题,我们在dll周围构建了一个瘦的mq包装器和一个瘦scala零mq客户端来处理对dll的请求。我们可以将zeromq包装的dll分发给网格中的所有节点。
我的问题是:是否可以使用Spark来处理这种情况?如何在RDD.map()
调用中调用zeromq scala客户端?如何在网格上处理?我们需要序列化zeromq客户端吗?
任何想法都非常感激:)
答案 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
与面向行的包装器一起使用可能会满足您的需求。你的问题并没有完全明确约束是什么,特别是关于图书馆中的州。