在 azure databricks 中调整类路径/更改 spring 版本
Adjust classpath / change spring version in azure databricks
我正在尝试在 Azure Databricks 中使用 Apache Spark/Ignite 集成。我使用 Databricks UI 安装 org.apache.ignite:ignite-spark-2.4:2.9.0 maven 库。我在访问我的 ignite cahces 时出错:
: 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
是用不同spring版本的ReflectionUtils
编译的。
我看到 spring-core-4.3.26.RELEASE.jar 安装在 /dbfs/FileStore/jars/maven/org/springframework 在 org.apache.ignite:ignite-spark-2.4:2.9.0 安装期间并且 [ 下没有其他 spring 版本的 jar =46=]
但数据块似乎在内部使用 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 中的类路径。我可以创建一个初始化脚本,之前已经这样做过,但我到底应该在其中做什么?
我尝试过不同的 databricks 运行时版本,目前我尝试使用 6.6。我认为 Apache Ignite 没有与 spark 3 集成。
在 link 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 文件,我可能已经破坏了一些依赖关系,但没有注意到我的任务有一些副作用。
我正在尝试在 Azure Databricks 中使用 Apache Spark/Ignite 集成。我使用 Databricks UI 安装 org.apache.ignite:ignite-spark-2.4:2.9.0 maven 库。我在访问我的 ignite cahces 时出错:
: 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
是用不同spring版本的ReflectionUtils
编译的。
我看到 spring-core-4.3.26.RELEASE.jar 安装在 /dbfs/FileStore/jars/maven/org/springframework 在 org.apache.ignite:ignite-spark-2.4:2.9.0 安装期间并且 [ 下没有其他 spring 版本的 jar =46=]
但数据块似乎在内部使用 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 中的类路径。我可以创建一个初始化脚本,之前已经这样做过,但我到底应该在其中做什么?
我尝试过不同的 databricks 运行时版本,目前我尝试使用 6.6。我认为 Apache Ignite 没有与 spark 3 集成。
在 link 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 文件,我可能已经破坏了一些依赖关系,但没有注意到我的任务有一些副作用。