通过SparkConf编程设置spark.executor.extraClassPath选项

4

我的项目JAR包与EMR上的JAR包冲突,为了解决这个问题,我通过引导脚本将所有高级JAR包复制到节点的自定义位置。我已经验证JAR包已经复制到所有执行器节点。

使用spark-submit工作正常,我的代码引用了所有节点自定义文件夹中的新JAR包。

/usr/bin/spark-submit --conf="spark.driver.extraClassPath=/usr/customJars/*" --conf="spark.executor.extraClassPath=/usr/customJars/*"  

我希望您能帮助我通过更新sparkconf对象来以编程方式实现同样的事情。

sparkConf.set("spark.driver.extraClassPath", "/usr/customJars/*");
sparkConf.set("spark.executor.extraClassPath", "/usr/customJars/*"); 

当我想要进行程序化实现时,它不能正常工作。我的代码没有引用自定义位置中更新的JAR文件。

有什么建议吗?

1个回答

1

在Spark中,大多数属性都无法在运行时更改。

您可以查看SparkConf文档:SparkConf

一旦将SparkConf传递给SparkContext构造函数,这些值将被克隆,并且无法更改。这是Spark的限制。

在测试新的属性更改之前,您需要确保停止并启动Spark会话。

根据文档的附加注释:Spark Configuration

对于spark.executor.extraClassPath

要在执行程序的类路径前面添加的额外类路径条目。这主要用于与旧版本的Spark向后兼容。用户通常不需要设置此选项。

您可以使用spark.jars,它将影响驱动程序和执行程序:

以逗号分隔的jar列表,包括驱动程序和执行程序的类路径。允许使用通配符。

确保您的jar文件在执行程序中可用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接