2017-01-11 10 views
8

Я строю API RESTful поверх Apache Spark. Служа следующий сценарий Python с spark-submit, кажется, работает нормально:почему Livy или spark-jobserver вместо простой веб-структуры?

import cherrypy 
from pyspark.sql import SparkSession 

spark = SparkSession.builder.appName('myApp').getOrCreate() 
sc = spark.sparkContext 

class doStuff(object): 
    @cherrypy.expose 
    def compute(self, user_input): 
     # do something spark-y with the user input 
     return user_output 

cherrypy.quickstart(doStuff()) 

Но вокруг меня прибегая к помощи увидеть такие вещи, как Livy и spark-jobserver. Я прочитал документацию этих проектов и пару учебных пособий, но я до сих пор не полностью понимаю преимущества Livy или spark-jobserver по простому сценарию с CherryPy или Flask или любой другой веб-картой. Это о масштабируемости? Контекстное управление? Что мне здесь не хватает? Если то, что я хочу, это простой API RESTful с небольшим количеством пользователей, есть ли проблемы с Livy или spark-jobserver? Если да, то почему?

ответ

7

Если вы используете spark-submit, вы должны загрузить файл JAR вручную в кластер и выполнить команду. Все должно быть подготовлено до запуска

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

Более того, Livy и Spark-JobServer позволяют использовать Spark в интерактивном режиме, что сложно сделать с помощью spark-submit;)

2

Я не буду комментировать, используя Ливия или искрового jobserver конкретно, но, по крайней мере, три причины, чтобы избежать встраивания контекста Спарка непосредственно в приложении:

  • безопасности с основным упором на сокращение воздействия кластера к внешнему миру. Атакующий, который получает контроль над вашим приложением, может делать что-либо между получением доступа к вашим данным для выполнения произвольного кода на вашем кластере, если кластер настроен неправильно.

  • Стабильность. Spark - сложная структура, и есть много факторов, которые могут повлиять на ее долгосрочную производительность и стабильность. Развязка контекста и приложения Spark позволяет обрабатывать проблемы Spark изящно, без полного простоя вашего приложения.

  • Отзывчивость. Пользователь, сталкивающийся с API Spark, в основном (в PySpark исключительно) синхронно. Использование внешнего сервиса в основном решает эту проблему для вас.

0

Spark Job Server или аналогичная функция должна быть частью самого Apache Spark. То же, что и у Apark Storm с интерфейсами UI и REST для аналогичной цели.