java spark依赖_Java——解决 Apache Spark中的依赖性问题

apache-spark的类路径是动态构建的(以适应每个应用程序的用户代码),这使得它容易受到此类问题的影响。@用户7337271的回答是正确的,但是还有一些问题,这取决于您使用的集群管理器(“master”)。

首先,Spark应用程序由这些组件组成(每个组件都是单独的JVM,因此在其类路径中可能包含不同的类):

驱动程序:这是创建SparkSession(或SparkContext)并 join到集群管理器以执行实际 job的应用程序。

apache-spark的集群模式概述中的这张图描述了它们之间的关系:

现在-这些组件中应该驻留哪些类?

这可以通过以下图表来回答:

让我们慢慢分析:

Spark代码是Spark的库。它们应该存在于所有三个组件中,因为它们包括让 spark在它们之间进行通信的胶水。顺便说一下,Spark的作者做出了一个设计决定,将所有组件的代码都包含在所有组件中(例如,将只在驱动程序的 executor中运行的代码也包括在内),以简化这一过程,所以Spark的“fat jar”(在1.6版本中)或“archive”(在2.0版本中,详细信息如下)包含了必要的代码。对于所有组件,应在所有组件中提供DE。

既然我们已经了解了这一点,那么如何让类正确地加载到每个组件中,以及它们应该遵循什么规则呢?

spark代码:正如前面的回答状态,您必须在所有组件中使用相同的scala和spark版本。

总而言之,这里有一个构建和部署 spark应用程序的建议方法(在本例中是使用 yarn ):

用您的分布式代码创建一个库,将其打包为一个“常规”JAR(带有一个描述其依赖性的.pom文件)和一个“胖JAR”(包含所有可传递的依赖性)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值