【问题标题】:spark-submit dependency conflictspark-submit 依赖冲突
【发布时间】:2018-08-16 19:07:09
【问题描述】:

我正在尝试向 spark 提交一个 jar,但我的 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 具有旧版本的validation-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

但我仍然遇到同样的异常

【问题讨论】:

  • 您好,您找到解决方案了吗?
  • 我没有....

标签: apache-spark


【解决方案1】:

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

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

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

【讨论】:

  • 我不想排除依赖项,我希望 spark 使用与我的 jar 捆绑在一起的新版本
【解决方案2】:

不确定是否使用 SBT,但我通过程序集在 build.sbt 中使用了它,因为我在某个阶段也有各种依赖冲突。见下文,也许这会有所帮助。

【讨论】:

  • 谢谢,但我使用的是 maven,它是 spring boot 应用程序
  • 应该有一些我期望的等价物。成功
【解决方案3】:

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

spark.driver.userClassPathFirst
spark.executor.userClassPathFirst

【讨论】:

    【解决方案4】:

    我遇到了 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 额外的类路径条目添加到驱动程序的类路径

    【讨论】:

      猜你喜欢
      • 2020-06-08
      • 1970-01-01
      • 2011-03-12
      • 2019-12-24
      • 2021-12-14
      • 2022-01-24
      • 2021-12-03
      • 2013-06-24
      相关资源
      最近更新 更多