Почему Livy или spark-jobserver вместо простой веб-структуры?

Я создаю API RESTful поверх Apache Spark. Выполнение следующего Python script с помощью 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())

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

Ответ 1

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

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

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

Ответ 2

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

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

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

  • Реагирование

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

Ответ 3

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