почему Livy или Spark-JobServer вместо простого веб-фреймворка?

Я создаю RESTful API поверх Apache Spark. Выполнение следующего скрипта Python с spark-submit, похоже, работает нормально:

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 или любым другим веб-фреймворком. Это о масштабируемости? Управление контекстом? Что мне здесь не хватает? Если мне нужен простой RESTful API с небольшим количеством пользователей, стоит ли Livy или spark-jobserver трудиться? Если да, то почему?


person Parzival    schedule 11.01.2017    source источник


Ответы (2)


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

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

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

person T. Gawęda    schedule 11.01.2017

Я не буду комментировать использование Livy или spark-jobserver специально, но есть как минимум три причины, по которым следует избегать встраивания контекста Spark непосредственно в ваше приложение:

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

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

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

person zero323    schedule 11.01.2017