火花提交依赖冲突

时间:2018-08-16 19:07:09

标签: apache-spark

我正试图提交一个jar来引发spark,但是我的jar包含与spark的内置jar(snakeyml等)冲突的依赖项。

有没有一种方法可以让spark首选我的项目比/ jar内的jar更依赖的项目 更新

当我运行spark-submit时,出现以下异常:

Caused by: java.lang.NoSuchMethodError: javax.validation.BootstrapConfiguration.getClockProviderClassName()Ljava/lang/String;
at org.hibernate.validator.internal.xml.ValidationBootstrapParameters.<init>(ValidationBootstrapParameters.java:63)
at org.hibernate.validator.internal.engine.ConfigurationImpl.parseValidationXml(ConfigurationImpl.java:540)
at org.hibernate.validator.internal.engine.ConfigurationImpl.buildValidatorFactory(ConfigurationImpl.java:337)
at javax.validation.Validation.buildDefaultValidatorFactory(Validation.java:110)
at org.hibernate.cfg.beanvalidation.TypeSafeActivator.getValidatorFactory(TypeSafeActivator.java:501)
at org.hibernate.cfg.beanvalidation.TypeSafeActivator.activate(TypeSafeActivator.java:84)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.hibernate.cfg.beanvalidation.BeanValidationIntegrator.integrate(BeanValidationIntegrator.java:132)
... 41 more

这是由于spark拥有较旧版本的validate-api(validation-api-1.1.0.Final.jar)引起的 我的项目依赖于较新的版本,并且确实与我的jar捆绑在一起(javax.validation:validation-api:jar:2.0.1.Final:compile)

我使用以下命令提交:

/spark/bin/spark-submit --conf spark.executor.userClassPathFirst=true --conf spark.driver.userClassPathFirst=true

但我仍然遇到相同的异常

4 个答案:

答案 0 :(得分:0)

如果使用SBT构建jar,则需要排除集群上的那些类。例如下面的例子:

"org.apache.spark" %% "spark-core" % "2.2.0" % "provided"

您通过添加“ provided”来做到这一点,这意味着在运行它的环境中已经提供了这些类。

答案 1 :(得分:0)

不确定是否使用SBT,但是我通过汇编在build.sbt中使用了它,因为在一个阶段我也遇到了一些依赖冲突。见下文,也许这会有所帮助。

enter image description here

答案 2 :(得分:0)

这是通过将以下confs设置为true来控制的:

spark.driver.userClassPathFirst
spark.executor.userClassPathFirst

答案 3 :(得分:0)

我遇到了2个jar的问题,这就是我最终要做的事情,即将所需的jar复制到目录中,并使用了extraClasspath选项

spark-submit   --conf spark.driver.extraClassPath="C:\sparkjars\validation-api-2.0.1.Final.jar;C:\sparkjars\gson-2.8.6.jar" myspringbootapp.jar

从文档中获取spark.driver.extraClassPath额外的类路径条目 ,以附加到驱动程序的类路径