Развертывание приложения Apache Spark из другого приложения на Java, передовая практика

Я новый пользователь Spark. У меня есть веб-служба, которая позволяет пользователю запрашивать сервер для выполнения сложного анализа данных путем чтения из базы данных и отправки результатов обратно в базу данных. Я переместил эти анализы в различные приложения Spark. В настоящее время я использую spark-submit для развертывания этих приложений.

Однако мне любопытно, когда мой веб-сервер (написанный на Java) получает запрос пользователя, что считается «наилучшей практикой» для запуска соответствующего приложения Spark? Документация Spark, похоже, использует «spark-submit», но я бы предпочел не передавать команду на терминал для выполнения этого действия. Я видел альтернативу, Spark-JobServer, которая предоставляет интерфейс RESTful, чтобы делать именно это, но мои приложения Spark написаны либо на Java, либо на R, что, похоже, плохо взаимодействует со Spark-JobServer.

Есть ли еще одна передовая практика для запуска искрового приложения с веб-сервера (на Java) и ожидания результата статуса, независимо от того, успешно ли задание выполнено или нет?

Любые идеи о том, что другие люди делают для достижения этой цели, были бы очень полезны! Спасибо!


person R.J.    schedule 26.03.2015    source источник


Ответы (3)


У меня было подобное требование. Вот что я сделал:

  1. Для отправки приложений я использую скрытый API отправки Spark REST: http://arturmkrtchyan.com/apache-spark-hidden-rest-api

  2. Используя этот же API, вы можете запросить статус драйвера или отменить свою работу позже.

  3. Также есть еще один скрытый Json API пользовательского интерфейса: http://[master-node]:[master-ui-port]/json/, который предоставляет всю информацию, доступную в главном пользовательском интерфейсе, в формате JSON.

Используя «API отправки», я отправляю драйвер, а с помощью «API Master UI» жду, пока состояние моего драйвера и приложения не будет ВЫПОЛНЯТЬСЯ.

person Roman    schedule 17.02.2016

Веб-сервер также может выступать в качестве драйвера Spark. Таким образом, он будет иметь экземпляр SparkContext и содержать код для работы с RDD.

Преимущество этого в том, что исполнители Spark долговечны. Вы экономите время, так как вам не нужно постоянно их запускать/останавливать. Вы можете кэшировать RDD между операциями.

Недостатком является то, что, поскольку исполнители работают все время, они занимают память, которую могли бы использовать другие процессы в кластере. Другой момент заключается в том, что у вас не может быть более одного экземпляра веб-сервера, поскольку вы не можете иметь более одного SparkContext для одного и того же приложения Spark.

person Daniel Darabos    schedule 27.03.2015

Мы используем Spark Job-server, и он отлично работает с Java, также просто создайте jar кода Java и оберните его Scala для работы с Spark Job-Server.

person Manish    schedule 22.03.2016