spark 2.3迁移到3.1.2相关改动
spark core 从2.4升级到3.0
1)org.apache.spark.ExecutorPlugin 接口和相关的配置被org.apache.spark.api.plugin.SparkPlugin接口替换,并且添加了新的功能使用旧接口的插件必须修改来扩展新的接口
2)过期的TaskContext.isRunningLocally方法被移除.Local execution被移除因为它总是返回false.
3)ShuffleWriteMetrics中的shuffleBytesWritten, shuffleWriteTime and shuffleRecordsWritten方法被移除,替换为bytesWritten,writeTime,recordsWritten.
4)AccumulableInfo.apply方法被移除 因为不允许创建AccumulableInfo.
5)accumulator v1 APIs被移除,需要使用 v2 APIs
6)日志文件采用UTF-8编码,spark history server将重放日志文件为UTF-8编码.之前的spark 写日志文件采用的编码是drive jvm进程默认的编码,因此需要 Spark 2.x 的 Spark History Server 读取旧的事件日志文件,以防编码不兼容.
7)使用了一种用于获取shuffle块的新协议.建议在运行 Spark 3.0 应用程序时升级外部 shuffle 服务。可以通过设置spark.shuffle.useOldFetchProtocol=true来使用老的 external shuffle service。否则的话spark 可能会运行提示如下错误 IllegalArgumentException: Unexpected message type: <number>.
8)在standalone模式中废弃SPARK_WORKER_INSTANCES。建议在一个 worker 中启动多个 executor 并为每个节点启动一个 worker,而不是每个节点启动多个 worker并为每个 worker 启动一个 executor。
spark core从3.0到3.1
1)在 Spark 3.0 及以下版本中,SparkContext可以在 executors 中创建。从 Spark 3.1 开始,SparkContext在 executors 中创建时会抛出异常。可以通过配置spark.executor.allowSparkContext来允许在executors中创建SparkContext
2)在Spark 3.0 及以下版本中,spark从yarn.application.classpath和mapreduce.application.classpath传播Hadoop classpath到提交到yarn上的spark application当spark distribution是built-in Hadoop。 从 Spark 3.1 开始,当 Spark distribution是built-in Hadoop时,它不再传播Hadoop classpath,以防止从 Hadoop 集群(例如 Guava 和 Jackson)获取的不同传递依赖项导致的失败。要恢复 Spark 3.1 之前的行为,您可以设置spark.yarn.populateHadoopClasspath为true.
作者:焦清波
原文链接:https://www.jianshu.com/p/6c12590d2443