当前位置: 首页 > 知识库问答 >
问题:

Spark程序中版本冲突的最佳解决方案

龙景澄
2023-03-14

我有一个Spark程序,它需要几个依赖项。

一个依赖项:a.jar是集群a_2.8.jar上的2.8版本,但是,我需要使用它的2.9版本a_2.9.jar

每次启动程序时,spark都会自动从集群加载A2.8.jar,而不是加载A2.9.jar,即使我已经通过--jars A2.9.jar提交了这个jar。

我尝试使用spark.executor.UserClasspathFirst设置,但出现了另一个问题。在我的userClassPath中有一个“秘密”jar文件,比如“b.jar”,它不能与集群一起工作,而且有如此多的依赖项,我不知道哪个jar不能工作。

总结一下:

如果我使用集群默认类路径,a.jar将发生冲突。

如果我使用userclasspathfirstb.jar会发生冲突。(不知道是哪个B.Jar)

我希望有人能给我一个建议,这里的最佳解决方案是什么,以最大限度地减少工作。

共有1个答案

戎亦
2023-03-14

使用Shade插件创建Uber JAR可以是您的解决方案。Uber jar正在收集您打包的jar中的所有从属jar,这样我们就不会发生冲突。我们可以用shade plugin重新定位/重命名一个冲突的jar。还有更多的优势。更多信息可以在这里和这里找到

 类似资料:
  • Windows 用tutorial进行的操作 若要进行pull操作,请右击tutorial目录,并选择‘拉取’。 用tutorial进行的操作 在以下画面点击‘确定’。 用tutorial进行的操作 我们看到画面上的警告信息表示自动合并失败。请点击‘关闭’以退出窗口。 用tutorial进行的操作 若您确认变更,请点击‘Yes’。 用tutorial进行的操作 TortoiseGit告诉我们:因"

  • 在上一个页面我们提及到,执行合并即可自动合并Git修改的部分。但是,也存在无法自动合并的情况。 如果远程数据库和本地数据库的同一个地方都发生了修改的情况下,因为无法自动判断要选用哪一个修改,所以就会发生冲突。 Git会在发生冲突的地方修改文件的内容,如下图。所以我们需要手动修正冲突。 ==分割线上方是本地数据库的内容, 下方是远程数据库的编辑内容。 如下图所示,修正所有冲突的地方之后,执行提交。

  • 解决冲突 CVS使用内联“冲突标志”来标记冲突,并且在更新时打印C。历史上讲,这导致了许多问题,因为CVS做得还不够。许多用户在它们快速闪过终端时忘记(或没有看到)C,即使出现了冲突标记,他们也经常忘记,然后提交了带有冲突标记的文件。 Subversion通过让冲突更明显来解决这个问题,它记住一个文件是处于冲突状态,在你运行svn resolved之前不会允许你提交修改,详情见“解决冲突(合并别人

  • 好的,所以我最近读了很多关于的文章,我认为有些人让它比实际更令人困惑。我想知道这个过程是否正确。 因此,当您有一个键和值时,例如出生于 1805-02-13 的彼得·狄利克雷,在这种情况下,将是和“ 第一步是在上使用哈希函数,即。让我们假设哈希函数生成这个值到bucket nr<code>5</code>。这意味着在该特定桶中,索引上,键/值对将被存储。 因此,如果我们想检索这些信息,我们使用并且

  • 我在使用commons-codec库时遇到(NoSuchMethodError)问题,这里有我的POM:`http://maven.apache.org/xsd/maven-4.0.0.xsd“>4.0.0 我使用了exclusions和dependencyManagement,但结果是相同的 有人能告诉我更好的解决这个问题的方法吗?

  • 问题内容: 我正在使用Apache Spark开发Java应用程序。我使用这个版本: 在我的代码中,有一个过渡依赖性: 我将应用程序打包到一个JAR文件中。使用将其部署到EC2实例上时,出现此错误。 此错误清楚地表明已加载了同一Apache httpclient库的较旧版本,因此发生此冲突。 解决此问题的好方法是什么? 由于某种原因,我无法在Java代码上升级Spark。但是,我可以使用EC2集群