如何使用 Apache Livy 设置 Spark 配置属性?
How to set Spark configuration properties using Apache Livy?
我不知道如何在将 Spark 作业提交给 Apache Livy 时以编程方式传递 SparkSession 参数:
这是 Test Spark 作业:
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")
您可以像这样通过 LivyClientBuilder
轻松做到这一点:
val client = new LivyClientBuilder()
.setURI(new URI(livyUrl))
.setConf("es.nodes","1localhost")
.setConf("key", "value")
.build()
可以使用
将配置参数设置为 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()
LivyClientBuilder.setConf
我觉得不行。因为 Livy 会修改所有不以 spark.
开头的配置。并且 Spark 无法读取修改后的配置。 See here
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")
不知道是elastic-spark做兼容性工作,还是spark。它只是工作。
PS:我已经尝试使用 REST API,它可以工作。但不是程序化的 API.
我不知道如何在将 Spark 作业提交给 Apache Livy 时以编程方式传递 SparkSession 参数:
这是 Test Spark 作业:
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")
您可以像这样通过 LivyClientBuilder
轻松做到这一点:
val client = new LivyClientBuilder()
.setURI(new URI(livyUrl))
.setConf("es.nodes","1localhost")
.setConf("key", "value")
.build()
可以使用
将配置参数设置为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()
LivyClientBuilder.setConf
我觉得不行。因为 Livy 会修改所有不以 spark.
开头的配置。并且 Spark 无法读取修改后的配置。 See here
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")
不知道是elastic-spark做兼容性工作,还是spark。它只是工作。
PS:我已经尝试使用 REST API,它可以工作。但不是程序化的 API.