ApacheSpark3和向后兼容性?

dkqlctbz  于 2021-05-29  发布在  Spark
关注(0)|答案(2)|浏览(877)

我们有几个spark应用程序在使用spark2.4.1(scala2.11.12)开发的产品上运行。对于我们的两个新spark工作,我们正在考虑利用deltalake的特性。为此,我们需要使用spark2.4.2(或更高版本)。
我的问题是:
如果我们将spark cluster升级到3.0.0,那么我们的2.4.1应用程序还能在新的集群上运行吗(不需要重新编译)?
如果我们需要用spark3重新编译以前的spark作业,它们是源代码兼容的还是需要任何迁移?

tag5nh1u

tag5nh1u1#

spark3.0.0中有一些突破性的变化,包括源代码不兼容的变化和二进制不兼容的变化。看到了吗https://spark.apache.org/releases/spark-release-3-0-0.html. scala2.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或更高版本。它们应该是源代码和二进制兼容的。

ocebsuys

ocebsuys2#

您可以交叉编译带有Scala2.11和Scala2.12的Spark2.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电子表格,这是一个没有使用scala 2.12构建的项目。有了这种依赖关系,您将无法轻松地将项目升级到Scala2.12。你要么自己用Scala2.12编译SparkGoogle电子表格,要么去掉依赖项。有关如何迁移到spark 3的更多详细信息,请参见此处。

相关问题