我正试图提交一个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
但我仍然遇到相同的异常
答案 0 :(得分:0)
如果使用SBT构建jar,则需要排除集群上的那些类。例如下面的例子:
"org.apache.spark" %% "spark-core" % "2.2.0" % "provided"
您通过添加“ provided”来做到这一点,这意味着在运行它的环境中已经提供了这些类。
答案 1 :(得分:0)
答案 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额外的类路径条目 ,以附加到驱动程序的类路径 。