Как интегрировать Apache Spark с веб-приложением Spring MVC для интерактивных пользовательских сеансов
Я пытаюсь создать систему рекомендаций для редакторов с помощью Apache Spark MLlib.
Я написал код для рекомендации в java и его работоспособность при запуске с помощью команды spark-submit
.
Моя команда запуска выглядит так:
bin/spark-submit --jars /opt/poc/spark-1.3.1-bin-hadoop2.6/mllib/spark-mllib_2.10-1.0.0.jar --class "com.recommender.MovieLensALSExtended" --master local[4] /home/sarvesh/Desktop/spark-test/recommender.jar /home/sarvesh/Desktop/spark-test/ml-latest-small/ratings.csv /home/sarvesh/Desktop/spark-test/ml-latest-small/movies.csv
Теперь я хочу использовать рекомендацию в реальном мире, как веб-приложение, в котором я могу запросить рекомендацию, чтобы дать некоторый результат.
Я хочу создать веб-приложение Spring MVC, которое может взаимодействовать с Apache Spark Context и давать мне результаты по запросу.
Мой вопрос в том, как я могу создать приложение, которое взаимодействует с Apache Spark, который работает в кластере. Таким образом, когда запрос поступает на контроллер, он должен выполнить запрос пользователя и получить тот же результат, что и команда spark-submit
, выводимая на консоль.
Насколько я искал, я обнаружил, что мы можем использовать Spark SQL, интегрироваться с JDBC. Но я не нашел хорошего примера.
Спасибо заранее.
Ответы
Ответ 1
Чтобы взаимодействовать с моделью данных (вызывать метод invoke?), вы могли бы создать службу отдыха внутри драйвера. Эта служба прослушивает запросы и вызывает метод прогнозирования модели с вводом запроса и возвращает результат.
http4s (https://github.com/http4s/http4s) можно использовать для этой цели.
Spark SQL не имеет значения, поскольку он предназначен для обработки аналитики данных (что вы уже сделали), с возможностями sql.
Надеюсь, что это поможет.
Ответ 2
просто передайте контекст искры и сеанс как bean в Spring
@Bean
public SparkConf sparkConf() {
SparkConf sparkConf = new SparkConf()
.setAppName(appName)
.setSparkHome(sparkHome)
.setMaster(masterUri);
return sparkConf;
}
@Bean
public JavaSparkContext javaSparkContext() {
return new JavaSparkContext(sparkConf());
}
@Bean
public SparkSession sparkSession() {
return SparkSession
.builder()
.sparkContext(javaSparkContext().sc())
.appName("Java Spark Ravi")
.getOrCreate();
}
Аналогично для конфигурации на основе xml
Здесь присутствует полный рабочий код с spring и искра
https://github.com/ravi-code-ranjan/spark-spring-seed-project
Ответ 3
Для такой ситуации был разработан интерфейс REST для обедов и обмена контекстом искровых работ
Посмотрите здесь документацию:
https://github.com/spark-jobserver/spark-jobserver
Ответ 4
Чтобы изолировать сеансы пользователя и показать результаты изолированным образом, вам может потребоваться использование очередей со связанным идентификатором пользователя. Для получения результатов требуется время, с этим идентификатором вы можете показать соответствующие результаты пользователю.