当我在应用程序中使用Java API客户端并连接到Spark集群时,将忽略参数spark.executor.extraClassPath。
我已经在spark-defaults.conf中设置了参数:
spark.executor.extraClassPath /absolute/path/my-jar.jar
我认为在spark-defaults.conf文件中声明它可以使我不必在Java应用程序中对其进行硬编码。 硬编码迫使我用绝对路径声明所有jar,因为知道它们不在我的应用程序运行的同一台机器上。
我已经编写了一些代码来处理数据集并在Java应用程序中获取结果:
SparkConf sparkConfig = new SparkConf().setAppName("HelloWorldApp")
.setMaster("spark://my.cluster.master:7077")
.set("spark.submit.deployMode", "cluster")
// It works when I set this programmatically
// but exception is thrown when I don't do it
.set("spark.executor.extraClassPath", "/remote/node/absolute/path/my-jar.jar");
SparkSession sparkSession = SparkSession.builder().config(sparkConfig).getOrCreate();
// Here I start playing with datasets to return some results
当我未在应用程序中对“ spark.executor.extraClassPath”进行硬编码时,spark-default.conf也将被忽略。
这是正常现象吗?我错过了什么吗?