Warm tip: This article is reproduced from serverfault.com, please click

java-调整类路径/更改Azure Databricks中的Spring版本

(java - Adjust classpath / change spring version in azure databricks)

发布于 2020-10-25 15:30:16

我正在尝试在Azure Databricks中使用Apache Spark / Ignite集成。使用Databricks UI安装了org.apache.ignite:ignite-spark-2.4:2.9.0 Maven库。而且在访问我的点火开关时出现错误:

: java.lang.NoSuchMethodError: org.springframework.util.ReflectionUtils.clearCache()V
        at org.springframework.context.support.AbstractApplicationContext.resetCommonCaches(AbstractApplicationContext.java:907)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:567)

这里AbstractApplicationContext是用ReflectionUtils不同的spring版本编译的。

我看到org.apache.ignite:ignite-spark-2.4:2.9.0安装过程中在/ dbfs / FileStore / jars / maven / org / springframework安装spring-core-4.3.26.RELEASE.jar并在那里/ dbfs / FileStore / jars下没有其他 Spring 版本的jar

但是似乎数据块内部使用了spring-core__4.1.4。

%sh
ls /databricks/jars | grep spring

印刷:

spark--maven-trees--spark_2.4--com.clearspring.analytics--stream--com.clearspring.analytics__stream__2.7.0.jar
spark--maven-trees--spark_2.4--org.springframework--spring-core--org.springframework__spring-core__4.1.4.RELEASE.jar
spark--maven-trees--spark_2.4--org.springframework--spring-test--org.springframework__spring-test__4.1.4.RELEASE.jar

我不是Java程序员,所以我没有解决此类冲突的经验。

是否有可能以某种方式调整databricks类路径或以其他方式解决此问题?

调整类路径可能很容易,但是我不知道如何。我只是在databricks文档中看到一句话,它可以更改init-script中的类路径。我可以创建一个init脚本,之前已经做过,但是我到底应该怎么做?

我尝试了不同的databricks运行时版本,目前尝试使用6.6。我认为Apache Ignite与spark 3没有集成。

Questioner
Роман Коптев
Viewed
0
Роман Коптев 2020-12-11 03:21:51

通过链接https://kb.databricks.com/libraries/replace-default-jar-new-jar.html,我创建了初始化脚本,如下所示:

dbutils.fs.mkdirs("dbfs:/databricks/scripts/")
dbutils.fs.put("dbfs:/databricks/scripts/install_spring.sh",
"""
rm -rf /databricks/jars/spark--maven-trees--spark_2.4--com.h2database--h2--com.h2database__h2__1.3.174.jar
rm -rf /databricks/jars/spark--maven-trees--spark_2.4--org.springframework--spring-core--org.springframework__spring-core__4.1.4.RELEASE.jar
rm -rf /databricks/jars/spark--maven-trees--spark_2.4--org.springframework--spring-test--org.springframework__spring-test__4.1.4.RELEASE.jar
cp /dbfs/FileStore/jars/maven/com/h2database/h2-1.4.197.jar /databricks/jars/
cp /dbfs/FileStore/jars/maven/org/springframework/spring-core-4.3.26.RELEASE.jar /databricks/jars/
cp /dbfs/FileStore/jars/maven/org/springframework/spring-test-4.3.26.RELEASE.jar /databricks/jars/
""", True)

之后,我在群集上注册了此初始化脚本,并且ignite集成为我工作(org.apache.ignite:ignite-spark-2.4:2.9.0,ignite 2.9.0,azure databricks 6.6)

在/ databricks / jars下预先安装了大约500个jar文件,可能我破坏了一些依赖关系,但没有注意到我的任务的一些副作用。