Spark 建议列出文档中提供的 Spark 和 Hadoop 依赖项,这是严格要求的吗?

问题描述 投票:0回答:1

在 Spark 文档中,它指出:

如果你的代码依赖于其他项目,你需要将它们打包 与您的应用程序一起,以便将代码分发到 Spark 簇。为此,创建一个程序集 jar(或“uber”jar),其中包含 您的代码及其依赖项。 sbt和Maven都有汇编 插件。创建程序集 jar 时,将 Spark 和 Hadoop 列为 提供依赖项;这些不需要捆绑,因为它们是 由集群管理器在运行时提供。

直接声明所有依赖项并将其打包到已部署的 uberjar 中会更加可靠,特别是考虑到 Hadoop 对依赖项版本之间的类兼容性问题非常敏感。即使在 EMR/AWS 中,我相信它们专门的 Spark、Hadoop 和 HBase 依赖项也可以作为 Maven 依赖项使用。请参阅 hadoop-aws 入门文档

是否绝对有必要将 Spark 和 Hadoop 依赖项保留为

<scope>provided</scope
并且在 uberjar 中不存在?如果 Ppark 和 Hadoop 依赖关系不是
<scope>provided</scope>
,会导致问题吗?

apache-spark hadoop hbase amazon-emr
1个回答
0
投票

根据指南,您不能混合实现,并且在 databricks/synapse/cloudera/emr 等情况下,您部署的完全有可能不是 100% 相同的 OSS 库(绝对是这种情况)至少是数据块)。

这可能会带来非常丑陋的头,出现奇怪且难以重现的初始化问题,或者更糟糕的是默默地产生不正确的结果。

阴影和重新定位只能让你到目前为止。事实上,使用 Maven 构建一个在笔记本中使用的着色 scala 库也并不简单(因为 Maven 着色插件不提供 ScalaSig 处理)。 (如果需要的话,testless 和 Quality 通过 脚本插件所采取的方法可以工作 - 除了宏)。

这个问题可能非常棘手,以至于质量还会覆盖其构建配置文件中的许多敏感库版本,与目标运行时不匹配实际上会导致此处失败(尽管重新定位类可以解决其中一些问题)。

© www.soinside.com 2019 - 2024. All rights reserved.