Как интегрировать 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. Но я не нашел ни одного хорошего примера.

Заранее спасибо.


person hard coder    schedule 12.06.2015    source источник
comment
Привет, ты нашел какое-нибудь решение? У меня аналогичное требование. Благодарность   -  person Amanpreet Khurana    schedule 08.05.2018


Ответы (5)


просто передайте контекст искры и сеанс как компонент в 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

Здесь присутствует полностью рабочий код с пружиной и искрой

https://github.com/ravi-code-ranjan/spark-spring-seed-project

person ravi ranjan    schedule 29.06.2017

Чтобы взаимодействовать с моделью данных (вызовите ее метод вызова?), вы можете создать службу отдыха внутри драйвера. Эта служба прослушивает запросы и вызывает метод прогнозирования модели с входными данными из запроса и возвращает результат.

Для этой цели можно использовать http4s (https://github.com/http4s/http4s).

Spark SQL не имеет значения, так как он предназначен для обработки аналитики данных (которую вы уже сделали) с возможностями sql.

Надеюсь это поможет.

person Huy Banh    schedule 01.09.2015

Для такого рода ситуаций был разработан интерфейс REST для обеда и обмена контекстом искровых заданий.

Взгляните на документацию здесь:

https://github.com/spark-jobserver/spark-jobserver

person eugenio calabrese    schedule 07.01.2016

Для изоляции пользовательских сеансов и отображения результатов в изолированном виде может потребоваться использование очередей с привязанным идентификатором пользователя. Если для получения результатов требуется время, с помощью этого идентификатора вы можете показать соответствующие результаты пользователю.

person Biju CD    schedule 24.05.2017

Я немного опоздал, но это может помочь другим пользователям. Если требуется удаленное получение данных из Spark, вы можете рассмотреть возможность использования HiveThriftServer2. Этот сервер предоставляет Spark SQL (кэшированные и временные таблицы) как базу данных JDBC/ODBC.

Таким образом, вы можете подключиться к Spark с помощью драйвера JDBC/ODBC и получить доступ к данным из таблиц SQL.

Чтобы сделать выше:

  1. Включите этот код в свое приложение Spark:

    A. Создайте конфигурацию Spark со следующими свойствами:

    config.set("hive.server2.thrift.port","10015");
    config.set("spark.sql.hive.thriftServer.singleSession", "true");
    

    B. Затем передайте контекст SQL на сервер экономии и запустите его, как показано ниже:

     HiveThriftServer2.startWithContext(session.sqlContext());
    

Это запустит сервер Thrift с контекстом SQL вашего приложения. Таким образом, он сможет возвращать данные из таблиц, созданных в этом контексте.

  1. На стороне клиента вы можете использовать приведенный ниже код для подключения к Spark SQL:

    Connection con = DriverManager.getConnection("jdbc:hive2://localhost:10015/default", "", "");
    
    Statement stmt = con.createStatement();            
    ResultSet rs = stmt.executeQuery("select count(1) from ABC");
    
person Amanpreet Khurana    schedule 11.05.2018