Apache Spark 3 和向后兼容性?

Apache Spark 3 and backward compatibility?

我们有几个 Spark 应用程序 运行ning 在使用 Spark 2.4.1 (Scala 2.11.12) 开发的生产环境中。 对于我们的几个新 Spark 作业,我们正在考虑利用 DeltaLake.For 的功能,我们需要使用 Spark 2.4.2(或更高版本)。

我的问题是:

  1. 如果我们将 Spark 集群升级到 3.0.0,我们的 2.4.1 应用程序是否仍然可以 运行 在新集群上(无需重新编译)?
  2. 如果我们需要用 Spark 3 重新编译以前的 Spark 作业,它们是否兼容源代码或者是否需要任何迁移?

Spark 3.0.0 中有一些重大更改,包括源代码不兼容更改和二进制不兼容更改。参见 https://spark.apache.org/releases/spark-release-3-0-0.html。而且Scala 2.11和2.12之间也有一些源代码和二进制不兼容的变化,所以你可能还需要因为Scala版本变化而更新代码。

但是,只有Delta Lake 0.7.0及以上版本需要Spark 3.0.0。如果升级到 Spark 3.0.0 需要大量工作,您可以使用 Delta Lake 0.6.x 或以下版本。您只需要在 2.4.x 行将 Spark 升级到 2.4.2 或更高版本。它们应该是源代码和二进制兼容的。

您可以使用Scala 2.11 和Scala 2.12 交叉编译项目Spark 2.4 项目。 Scala 2.12 JAR 通常适用于 Spark 3 应用程序。在某些情况下,使用 Spark 2.4/Scala 2.12 JAR 无法在 Spark 3 集群上正常工作。

最好完全迁移到 Spark 3/Scala 2.12 并使用 Spark 2/Scala 2.11 切断电源线。

升级可能会很痛苦,尤其是当您的项目有很多依赖项时。例如,假设您的项目依赖 spark-google-spreadsheets, a project that's not built with Scala 2.12. With this dependency, you won't be able to easily upgrade your project to Scala 2.12. You'll need to either compile spark-google-spreadsheets with Scala 2.12 yourself or drop the dependency. See here 以获取有关如何迁移到 Spark 3 的更多详细信息。