Как установить свойства конфигурации Spark с помощью Apache Livy?

Я не знаю, как программно передавать параметры SparkSession при отправке задания Spark в Apache Livy:

Это задание Test Spark:

class Test extends Job[Int]{

  override def call(jc: JobContext): Int = {

    val spark = jc.sparkSession()

    // ...

  }
}

Вот как это задание Spark передается Ливи:

val client = new LivyClientBuilder()
  .setURI(new URI(livyUrl))
  .build()

try {
  client.uploadJar(new File(testJarPath)).get()

  client.submit(new Test())

} finally {
  client.stop(true)
}

Как передать следующие параметры конфигурации в SparkSession?

  .config("es.nodes","1localhost")
  .config("es.port",9200)
  .config("es.nodes.wan.only","true")
  .config("es.index.auto.create","true")

person Markus    schedule 11.03.2018    source источник


Ответы (3)


Вы можете легко сделать это с помощью LivyClientBuilder вот так:

val client = new LivyClientBuilder()
  .setURI(new URI(livyUrl))
  .setConf("es.nodes","1localhost")
  .setConf("key", "value")
  .build()
person Lokesh Yadav    schedule 11.03.2018

Параметры конфигурации могут быть установлены на LivyClientBuilder с помощью

public LivyClientBuilder setConf(String key, String value)

так что ваш код начинается с:

val client = new LivyClientBuilder()
  .setURI(new URI(livyUrl))
  .setConf("es.nodes","1localhost")
  .setConf("es.port",9200)
  .setConf("es.nodes.wan.only","true")
  .setConf("es.index.auto.create","true")
  .build()
person pcejrowski    schedule 11.03.2018
comment
Я пытаюсь использовать поле conf в вызове livy post, чтобы установить spark.network.timeout в 600s. Есть ли способ проверить, правильно ли установлено значение или нет? У меня есть вопрос также на этом - person Sayantan Ghosh; 16.04.2019
comment
Я нахожусь в той же лодке, отправляю conf через REST API, и, похоже, Ливи не передает его в контекст искры - person willredington315; 22.05.2020

LivyClientBuilder.setConf Думаю, не выйдет. Потому что Ливи будет изменять все конфиги, не начинающиеся с spark.. И Spark не может прочитать измененный конфиг. См. Здесь

private static File writeConfToFile(RSCConf conf) throws IOException {
    Properties confView = new Properties();
    for (Map.Entry<String, String> e : conf) {
      String key = e.getKey();
      if (!key.startsWith(RSCConf.SPARK_CONF_PREFIX)) {
        key = RSCConf.LIVY_SPARK_PREFIX + key;
      }
      confView.setProperty(key, e.getValue());
    }
 ...
}

Так что ответ довольно прост: добавьте spark. во все конфигурации es, вот так,

  .config("spark.es.nodes","1localhost")
  .config("spark.es.port",9200)
  .config("spark.es.nodes.wan.only","true")
  .config("spark.es.index.auto.create","true")

Не знаю, что это эластичная искра, или искра совместимости. Просто работает.

Spark UI показывает конфигурации

PS: Я пробовал использовать REST API, и он работает. Но не с программным API.

person debugging    schedule 27.06.2020