1

在将 Spark 作业提交到 Apache Livy 时,我不知道如何以编程方式传递 SparkSession 参数:

这是测试火花作业:

class Test extends Job[Int]{

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

    val spark = jc.sparkSession()

    // ...

  }
}

这是将此 Spark 作业提交给 Livy 的方式:

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")
4

3 回答 3

2

您可以通过以下方式轻松做到这LivyClientBuilder一点:

val client = new LivyClientBuilder()
  .setURI(new URI(livyUrl))
  .setConf("es.nodes","1localhost")
  .setConf("key", "value")
  .build()
于 2018-03-11T21:09:51.877 回答
2

配置参数可以设置为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()
于 2018-03-11T21:09:53.290 回答
0

LivyClientBuilder.setConf行不通,我想。因为 Livy 会修改所有不以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,它可以工作。但不是使用 Programmatic API。

于 2020-06-27T05:53:55.020 回答