Использование Spark для вызова функций dll вне процесса

Мы оцениваем, использовать ли Spark для расчета сетки, и у нас возникли проблемы с конкретным вариантом использования. Интересно, есть ли у сообщества хорошие идеи?

У нас есть обширная библиотека функций C ++ в dll, которую нам нужно использовать по всей сетке. База кода C ++ большая, не особо стабильная (часто падает) и содержит состояние (поток небезопасен). По этой причине DLL должен жить вне процесса.

Чтобы справиться с этим, мы создали тонкую оболочку с нулевым mq вокруг dll и тонкий клиент с нулевым mq для scala для обработки запросов к dll. Мы можем распределить dll, завернутый в zeromq, по всем узлам сетки.

Мой вопрос: возможно ли использовать Spark для решения этой ситуации? Как я могу делать звонки клиенту zeromq scala внутри RDD.map() вызов? Как это может быть обработано на сетке? Нужно ли сериализовать клиент zeromq?

Любые идеи высоко ценится 🙂

0

Решение

Вы, вероятно, хотите запустить экземпляр своего пользовательского сервера на каждом узле. Затем вы можете создать нового клиента для каждого раздела. Вместо RDD.map вы бы использовали RDD.mapPartitions, что-то вроде этого:

rdd.mapPartitions { it =>
val client = new MyClient("localhost:2345")
it.map(x => client.calculate(x))
}
1

Другие решения

С помощью RDD.pipe с линейно-ориентированной оболочкой может удовлетворить ваши потребности. В вашем вопросе не совсем ясно, какие существуют ограничения, особенно в отношении состояния в библиотеке.

1

По вопросам рекламы [email protected]