迁移指南:Spark Core
从 Core 3.4 升级到 3.5
-
从 Spark 3.5 开始,
spark.yarn.executor.failuresValidityInterval已被弃用。请改用spark.executor.failuresValidityInterval。 -
从 Spark 3.5 开始,
spark.yarn.max.executor.failures已被弃用。请改用spark.executor.maxNumFailures。
从 Core 3.3 升级到 3.4
-
自 Spark 3.4 起,Spark 驱动程序将拥有
PersistentVolumnClaim并尝试重用,如果它们没有分配给活动执行者。要恢复 Spark 3.4 之前的行为,您可以将spark.kubernetes.driver.ownPersistentVolumeClaim设置为false,并将spark.kubernetes.driver.reusePersistentVolumeClaim设置为false。 -
自 Spark 3.4 起,当启用动态分配且没有 shuffle 服务时,Spark 驱动程序将跟踪 shuffle 数据。要恢复 Spark 3.4 之前的行为,您可以将
spark.dynamicAllocation.shuffleTracking.enabled设置为false。 -
自 Spark 3.4 起,如果
spark.decommission.enabled和spark.storage.decommission.enabled都为 true,Spark 将尝试退役缓存的 RDD 和 shuffle 块。要恢复 Spark 3.4 之前的行为,您可以将spark.storage.decommission.rddBlocks.enabled和spark.storage.decommission.shuffleBlocks.enabled都设置为false。 -
自 Spark 3.4 起,如果
spark.history.store.hybridStore.enabled为 true,Spark 将使用 RocksDB 存储。要恢复 Spark 3.4 之前的行为,您可以将spark.history.store.hybridStore.diskBackend设置为LEVELDB。
从 Core 3.2 升级到 3.3
-
自 Spark 3.3 起,Spark 将其 log4j 依赖从 1.x 迁移到 2.x,因为 log4j 1.x 已经达到生命周期结束,不再得到社区的支持。在 2015 年 8 月之后报告的针对 log4j 1.x 的漏洞不会得到检查,也不会被修复。用户应使用 log4j2 语法(XML、JSON、YAML 或属性格式)重写原始的 log4j 属性文件。Spark 将包含在 Spark 发行版中的
conf/log4j.properties.template重写为conf/log4j2.properties.template,格式为 log4j2 属性。
从 Core 3.1 升级到 3.2
-
自 Spark 3.2 以来,
spark.scheduler.allocation.file支持使用 Hadoop 文件系统读取远程文件,这意味着如果路径没有方案,Spark 将尊重 Hadoop 配置进行读取。要恢复 Spark 3.2 之前的行为,您可以为spark.scheduler.allocation.file指定本地方案,例如file:///path/to/file。 -
自 Spark 3.2 以来,
spark.hadoopRDD.ignoreEmptySplits默认设置为true,这意味着 Spark 不会为空的输入拆分创建空分区。要恢复 Spark 3.2 之前的行为,您可以将spark.hadoopRDD.ignoreEmptySplits设置为false。 -
自 Spark 3.2 以来,
spark.eventLog.compression.codec默认设置为zstd,这意味着 Spark 将不再使用spark.io.compression.codec作为回退。 -
自 Spark 3.2 以来,
spark.storage.replication.proactive默认启用,这意味着在由于执行器失败而丢失缓存 RDD 块副本时,Spark 会尝试补充。要恢复 Spark 3.2 之前的行为,您可以将spark.storage.replication.proactive设置为false。 -
在 Spark 3.2 中,
spark.launcher.childConectionTimeout已弃用(拼写错误),但仍可使用。请改用spark.launcher.childConnectionTimeout。 -
在 Spark 3.2 中,对 Apache Mesos 作为资源管理器的支持已弃用,并将在未来版本中删除。
-
在 Spark 3.2 中,当应用程序自行终止时,Spark 将删除 K8s 驱动程序服务资源。要恢复 Spark 3.2 之前的行为,您可以将
spark.kubernetes.driver.service.deleteOnTermination设置为false。
从 Core 3.0 升级到 3.1
-
在 Spark 3.0 及更早版本中,
SparkContext可以在执行器中创建。自 Spark 3.1 起,在执行器中创建SparkContext时将抛出异常。您可以通过在执行器中创建SparkContext时设置配置spark.executor.allowSparkContext来允许它。 -
在 Spark 3.0 及更早版本中,当 Spark 发行版内置 Hadoop 时,Spark 从
yarn.application.classpath和mapreduce.application.classpath传播 Hadoop 类路径到提交给 YARN 的 Spark 应用程序。自 Spark 3.1 起,当 Spark 发行版内置 Hadoop 时,它不再传播,以防止因从 Hadoop 集群中选择的不同传递依赖(如 Guava 和 Jackson)导致的失败。要恢复 Spark 3.1 之前的行为,您可以将spark.yarn.populateHadoopClasspath设置为true。
从 Core 2.4 升级到 3.0
-
接口
org.apache.spark.ExecutorPlugin及相关配置已被替换为org.apache.spark.api.plugin.SparkPlugin,新增功能。使用旧接口的插件必须修改为扩展新接口。有关更多详细信息,请查看 监控 指南。 -
已删除已弃用的方法
TaskContext.isRunningLocally。本地执行已被移除,并且它总是返回false。 -
已删除在
ShuffleWriteMetrics中已弃用的方法shuffleBytesWritten、shuffleWriteTime和shuffleRecordsWritten。请分别使用bytesWritten、writeTime和recordsWritten。 -
已删除已弃用的累加器
AccumulableInfo.apply,因为不允许创建AccumulableInfo。 -
已删除已弃用的累加器 v1 API,建议使用 v2 API。
-
事件日志文件将以 UTF-8 编码写入,Spark 历史服务器将以 UTF-8 编码重放事件日志文件。之前 Spark 以驱动程序 JVM 进程的默认字符集写入事件日志文件,因此 Spark 2.x 的 Spark 历史服务器需要读取旧的事件日志文件以防编码不兼容。
-
使用了一种新的协议来获取洗牌块。建议在运行 Spark 3.0 应用时升级外部洗牌服务。您仍然可以通过将配置
spark.shuffle.useOldFetchProtocol设置为true来使用旧的外部洗牌服务。否则,Spark 可能会遇到如IllegalArgumentException: Unexpected message type:的错误消息。 -
SPARK_WORKER_INSTANCES在独立模式下已弃用。建议在一个工作节点中启动多个执行器,并在每个节点启动一个工作节点,而不是在每个节点启动多个工作节点并为每个工作节点启动一个执行器。