文档首页/ 数据湖探索 DLI/ 服务公告/ 版本支持公告/ Spark2.4.x与Spark3.3.x版本差异对比/ Spark2.4.x与Spark3.3.x版本在通用队列的差异对比
更新时间:2024-12-24 GMT+08:00
分享

Spark2.4.x与Spark3.3.x版本在通用队列的差异对比

DLI整理了Spark2.4.x与Spark3.3.x版本在通用队列的差异,便于您了解Spark版本升级后通用队列上运行的作业在适配新版本引擎时的影响。

log4j依赖从1.x版本修改为2.x版本

  • 说明:

    log4j依赖从1.x版本修改为2.x版本

    • Spark2.4.x:log4j依赖1.x版本(社区不再支持)。
    • Spark3.3.x:log4j依赖2.x版本。
  • 升级引擎版本后是否对作业有影响:

    有影响

Spark3.3.x不支持v1表

  • 说明:

    Spark2.4.x支持datasourcev1、datasourcev2表。Spark3.3.x不支持v1表。

    具体说明请参考DLI datasourceV1表和datasourceV2表

    • Spark2.4.x:支持datasourcev1、datasourcev2表。
    • Spark3.3.x:不支持支持datasourcev1表。
  • 升级引擎版本后是否对作业有影响:

    有影响,建议在Spark2.4.5版本整改到v2表后再升级Spark3.3.1,具体操作指导可以参考DLI datasourceV1表和datasourceV2表的中的示例。

默认情况下空的input split不创建partition

  • 说明:
    • Spark2.4.x:默认情况下空的input split将创建partition。
    • Spark3.3.x:默认情况下空的input split不创建partition。

      Spark3.3.x时spark.hadoopRDD.ignoreEmptySplits=true。

  • 升级引擎版本后是否对作业有影响:

    有影响,需要判断是否使用分区名做业务判断。

eventlog的压缩格式设置为zstd

  • 说明:

    Spark3.3.x版本中,spark.eventLog.compression.codec的默认值被设置为zstd,Spark在压缩事件日志时将不再支持使用spark.io.compression.codec的参数值。

    • Spark2.4.x:使用spark.io.compression.codec的参数值作为eventlog的压缩格式。
    • Spark3.3.x:spark.eventLog.compression.codec默认设置为zstd。
  • 升级引擎版本后是否对作业有影响:

    有影响,eventlog的压缩格式发生变化。

spark.launcher.childConectionTimeout修改

  • 说明:
    • Spark2.4.x:配置名为spark.launcher.childConectionTimeout
    • Spark3.3.x:配置名修改为spark.launcher.childConnectionTimeout
  • 升级引擎版本后是否对作业有影响:

    有影响,配置参数名称变化。

Spark3.3.x不再支持将Apache Mesos作为资源管理器

  • 说明:
    • Spark2.4.x:Spark 2.4.x版本中使用Apache Mesos作为资源管理器。
    • Spark3.3.x:Spark3.3.x不再支持将Apache Mesos作为资源管理器。
  • 升级引擎版本后是否对作业有影响:

    功能增强,Spark 2.4.x版本中使用Mesos作为资源管理器,升级到Spark 3.3.x后,你需要考虑切换到其他资源管理器。

Spark3.3.x会在应用程序自行终止时删除K8s driver

  • 说明:Spark3.3.x会在应用程序自行终止时删除K8s driver。
  • 升级引擎版本后是否对作业有影响:

    功能增强,升级到Spark 3.3.x后,对于之前依赖于Kubernetes作为资源管理器的作业会有影响。Spark 3.3.x在应用程序终止时会自动删除driver pod可能会影响到作业的资源管理和清理流程。

Spark3.3.x支持自定义k8s的调度器

  • 说明:
    • Spark2.4.x:不支持使用指定Kubernetes调度器来管理Spark作业的资源分配和调度。
    • Spark3.3.x:Spark3.3.x支持自定义k8s的调度器。
  • 升级引擎版本后是否对作业有影响:

    功能增强,支持自定义调度器管理资源的分配和调度。

Spark将不可为null的模式转换为可空

  • 说明:

    在Spark 2.4.x版本中,当用户指定的schema包含不可为空的字段时,Spark会将这些不可为null的模式转换为可空的。

    但是在Spark 3.3.x版本中,Spark尊重用户指定的schema中的nullability,即如果字段被定义为不可为空,Spark会保持该配置要求,不会自动转换为可空的字段。

    • Spark2.4.x:在Spark 2.4.x版本中,当用户指定的schema包含不可为空的字段时,Spark会将这些不可为null的模式转换为可空的。
    • Spark3.3.x:Spark不会自动转换为可空的字段。

      如果希望在Spark 3.3.x版本中恢复到Spark 2.4.x版本的执行方式,您可以通过将 spark.sql.legacy.respectNullabilityInTextDatasetConversion设置为true来实现。

  • 升级引擎版本后是否对作业有影响:

    有影响。

  • 示例代码

    执行sql:

    spark.read.schema(StructType(
    StructField("f1", LongType, nullable = false) ::
    StructField("f2", LongType, nullable = false) :: Nil)
    ).option("mode", "DROPMALFORMED").json(Seq("""{"f1": 1}""").toDS).show(false);
    • Spark2.4.5
      |f1 |f2 |
      +---+---+
      |1  |0  |
    • Spark3.3.1
      |f1 |f2  |
      +---+----+
      |1  |null|

Spark scala版本变更

  • 说明:

    Spark scala版本变更。

    • Spark2.4.x:Spark scala版本为2.11。
    • Spark3.3.x:Spark scala版本升级到2.12。
  • 升级引擎版本后是否对作业有影响:

    有影响,jar需要升级scala版本编译。

PySpark支持python版本变更

  • 说明:

    PySpark支持python版本变更。

    • Spark2.4.x:PySpark支持python版本范围2.6+版本到3.7+版本。
    • Spark3.3.x:PySpark支持Python版本范围3.6及以上版本。
  • 升级引擎版本后是否对作业有影响:

    依赖版本变化,有影响,需要排查是否涉及。

PySpark-pandas支持版本变更

  • 说明:
    • Spark2.4.x:在Spark 2.4.x版本中,PySpark并没有要求指定Pandas的版本。
    • Spark3.3.x:从Spark 3.3.x版本开始,PySpark需要0.23.2或更高版本的pandas才能使用pandas相关功能,如toPandas、 toPandas, createDataFrame from pandas DataFrame等。
  • 升级引擎版本后是否对作业有影响:

    依赖版本变化,有影响,需要排查是否涉及。

PySpark-PyArrow支持版本变更

  • 说明:
    • Spark2.4.x:在Spark 2.4.x版本中,PySpark并没有要求指定PyArrow的版本。
    • Spark3.3.x:从Spark 3.3.x版本开始,PySpark需要0.12.1或更高版本的PyArrow才能使用PyArrow相关功能,如Pandas_udf、toPandas等。
  • 升级引擎版本后是否对作业有影响:

    依赖版本变化,有影响,需要排查是否涉及。

以command命名DataFrameWriter触发的查询

在Spark 3.2.x版本中,当DataFrameWriter触发的查询执行被发送给QueryExecutionListener时,这些查询的名称总是被设置为command。而在Spark 3.1及更早版本中,这些查询的名称可能是save、insertInto或saveAsTable之一,这取决于具体的操作。

  • 说明:

    DataFrameWriter触发的查询执行在发送到QueryExecutionListener时,始终以command命名

    • Spark2.4.x:名称为save、insertInto、saveAsTable中的一个
    • Spark3.3.x:command命名
  • 升级引擎版本后是否对作业有影响:

    有影响

相关文档