Установите spark.driver.memory для Spark, работающего внутри веб-приложения - PullRequest
0 голосов
/ 27 апреля 2018

У меня есть REST API в Scala Spray, который запускает задания Spark следующим образом:

path("vectorize") {
        get {
          parameter('apiKey.as[String]) { (apiKey) =>
            if (apiKey == API_KEY) {
              MoviesVectorizer.calculate() // Spark Job run in a Thread (returns Future)
              complete("Ok")
            } else {
              complete("Wrong API KEY")
            }

          }
        }
      }

Я пытаюсь найти способ указать память драйвера Spark для заданий. Как я обнаружил, настройка driver.memory из кода приложения ни на что не влияет.

Целое веб-приложение вместе со Spark упаковано в толстую банку. Я запускаю это, запустив

java -jar app.jar

Таким образом, как я понимаю, spark-submit здесь не актуален (или это так?). Поэтому я не могу указать опцию --driver-memory при запуске приложения.

Есть ли способ установить память драйвера для Spark в веб-приложении?

Вот моя текущая конфигурация Spark:

val spark: SparkSession = SparkSession.builder()
                        .appName("Recommender")
                        .master("local[*]")
                        .config("spark.mongodb.input.uri", uri)
                        .config("spark.mongodb.output.uri", uri)
                        .config("spark.mongodb.keep_alive_ms", "100000")
                        .getOrCreate()

spark.conf.set("spark.executor.memory", "10g")
val sc = spark.sparkContext
sc.setCheckpointDir("/tmp/checkpoint/")
val sqlContext = spark.sqlContext

Как сказано в документации, вкладка Spark UI Environment отображает только переменные, на которые влияет конфигурация. Все, что я установил, там - кроме spark.executor.memory.

1 Ответ

0 голосов
/ 27 апреля 2018

Это происходит потому, что вы используете режим local. В режиме local нет реального исполнителя - все компоненты Spark работают в одной JVM с конфигурацией с одной кучей, поэтому конфигурация для конкретного исполнителя не имеет значения.

spark.executor параметры применимы только тогда, когда заявки передаются в кластер.

Кроме того, Spark поддерживает только одно приложение на экземпляр JVM. Это означает, что все основные свойства Spark будут применяться только при инициализации SparkContext и сохраняться до тех пор, пока сохраняется контекст (не SparkSession). Поскольку SparkSession инициализирует SparkContext, никакие дополнительные настройки "ядра" не могут быть применены после getOrCreate.

Это означает, что все «основные» опции должны быть предоставлены с использованием config метода SparkSession.builder.

Если вы ищете альтернативы встраиванию, проверьте примерный ответ на Наилучшая практика запуска Spark Applications через веб-приложение? от T. Gawęda .


Примечание : Официально Spark не поддерживает приложения, работающие вне spark-submit, и с этим связаны некоторые неуловимые ошибки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...