Databricks RuntimeX迁移指南
本指南提供了帮助您从Databricks Runtime 6迁移Databricks工作负载的指导。在Apache Spark 2.4上构建的Databricks Runtime 7.3 LTSorgydF4y2BaDatabricks Runtime 7.6(不支持)(最新的Databricks Runtime 7。xrelease), both built on Spark 3.0. The same migration considerations apply for Databricks Runtime 7.3 LTS for Machine Learning, Databricks Runtime 7.3 LTS for Genomics, and Databricks Runtime 7.6 for Machine Learning.
本指南列出了Spark 3.0行为改变这可能需要您更新Databricks工作负载。其中一些变化包括完全取消对Python 2的支持,升级到Scala 2.12,完全支持JDK 11,以及日期和时间戳从格里高利历切换到prospect日历。
本指南是Databricks Runtime 7.3 LTS迁移指南.
Databricks Runtime 7.x提供了新特性和改进
有关Databricks Runtime 7.3 LTS和Databricks Runtime 7.6中包含的新特性、改进和库升级的列表,请参阅正在迁移的每个Databricks Runtime版本的发布说明。7. For Databricks RuntimeX,这些包括:
发布后维护更新列在数据库运行时维护更新.
Databricks运行时7.3 LTS和7.6系统环境
操作系统: Ubuntu 18.04.5 LTS
Java:
7.6:Zulu 8.50.0.51-CA-linux64 (build 1.8.0_275-b01)
7.3 LTS:Zulu 8.48.0.53-CA-linux64 (build 1.8.0_265-b11)
Scala: 2.12.10
Python: 3.7.5
R: 3.6.3 (2020-02-29)
三角洲湖0.7.0
Apache Spark 3.0的主要行为改变
当您从Databricks Runtime 6迁移时,以下从Spark 2.4到Spark 3.0的行为更改可能需要您更新Databricks工作负载。到Databricks Runtime 7.x。
请注意
本文提供了一个重要的Spark行为更改列表,供您在迁移到Databricks Runtime 7.x时考虑。有关行为更改的完整列表,请参见Spark 3.0.1迁移指南.
核心
在Spark 3.0中,已弃用的累加器v1被移除。
事件日志文件将以UTF-8编码写入,Spark History Server将以UTF-8编码重放事件日志文件。此前Spark将事件日志文件写入驱动程序JVM进程的默认字符集,因此Spark 2的Spark History Server。在编码不兼容的情况下,需要X来读取旧的事件日志文件。
使用了一种新的抓取shuffle块的协议。建议在运行Spark 3.0应用时升级外部shuffle服务。您仍然可以通过设置配置使用旧的外部shuffle服务
spark.shuffle.useOldFetchProtocol
来真正的
.否则,Spark可能会遇到类似这样的消息错误IllegalArgumentException:意想不到的消息类型:<数>
.
PySpark
在Spark 3.0中
Column.getItem
是固定的以致它不召唤吗Column.apply
.因此,如果列
用作对getItem
,则应使用索引操作符。例如,map_col.getItem(坳(id))
应该用map_col[坳(id)]
.从Spark 3.0开始,
行
Python 3.6及以上版本使用命名参数构造时,字段名不再按字母顺序排序,字段的顺序将与输入的顺序匹配。如在Spark 2.4中一样,要默认启用排序字段,请设置环境变量PYSPARK_ROW_FIELD_SORTING_ENABLED
来真正的
对于执行程序和驱动程序。该环境变量必须在所有执行程序和驱动程序上保持一致。否则,可能会导致失败或错误的答案。对于低于3.6的Python版本,字段名是按字母顺序排序的,这是唯一的选项。已弃用的Python 2支持(火星- 27884).
结构化流
在Spark 3.0中,当使用基于文件的数据源(如text、json、csv、parquet和orc)时,结构化流将源模式强制为空
spark.readStream(…)
.以前,它尊重源模式中的可空性;然而,它导致了棘手的问题,调试与NPE。若要恢复先前的行为,请设置spark.sql.streaming.fileSource.schema.forceNullable
来假
.Spark 3.0修复了流-流外部连接的正确性问题,这会改变状态模式。看到火星- 26154欲知详情。如果您从Spark 2构建的检查点开始查询。xwhich uses stream-stream outer join, Spark 3.0 fails the query. To recalculate outputs, discard the checkpoint and replay previous inputs.
在Spark 3.0中,已弃用的类
org.apache.spark.sql.streaming.ProcessingTime
已被删除。使用org.apache.spark.sql.streaming.Trigger.ProcessingTime
代替。同样的,org.apache.spark.sql.execution.streaming.continuous.ContinuousTrigger
已经被移除了,取而代之的是触发器。连续
,org.apache.spark.sql.execution.streaming.OneTimeTrigger
一直隐藏在偏爱之中触发器。一次
.看到火星- 28199.
SQL,数据集和数据帧
在Spark 3.0中,当将一个值插入到具有不同数据类型的表列中时,类型强制转换将按照ANSI SQL标准执行。某些不合理的类型转换,如转换
字符串
来int
而且双
来布尔
是不允许。如果值超出列数据类型的范围,则将引发运行时异常。在Spark 2.4及更早的版本中,只要类型转换有效,就允许在表插入期间进行类型转换投
.当将超出范围的值插入到整型字段时,将插入该值的低阶位(与Java/Scala数值类型强制转换相同)。例如,如果将257插入到字节类型的字段中,结果为1。行为由选项控制spark.sql.storeAssignmentPolicy
,默认值为“ANSI”。将选项设置为“Legacy”将恢复以前的行为。在Spark 3.0中,当将字符串值转换为整型(tinyint, smallint, int和bigint), datetime类型(date, timestamp和interval)和布尔类型时,前导和尾部的空白(<= ACSII 32)在转换为这些类型值之前会被修剪
铸造('1 \ t '作为int)
返回1
,铸造('1 \ t '作为布尔型)
返回真正的
,(“2019-10-10 \ t作为日期)
返回日期值2019-10-10
.在Spark 2.4及更早的版本中,当将字符串强制转换为整数和布尔值时,它不会从两端修剪空白,前面的结果将是零
,而到datetimes,只有尾随空格(= ASCII 32)将被删除。看到//www.neidfyre.com/blog/2020/07/22/a-comprehensive-look-at-dates-and-timestamps-in-apache-spark-3-0.html.在Spark 3.0中,已弃用的方法
SQLContext.createExternalTable
而且SparkSession.createExternalTable
已经被移除,取而代之的是,不知道
.在Spark 3.0中,配置
spark.sql.crossJoin.enabled
变成内部配置,默认情况下为true,因此默认情况下Spark不会在使用隐式交叉连接的SQL上引发异常。在Spark 3.0中,我们颠倒了trim函数的参数顺序
削减(trimStrstr)
来削减(str,trimStr)
与其他数据库兼容。在Spark 2.4及更早的版本中,SQL查询如
从<表>
orgydF4y2Ba从<表>联盟所有从<表>
都是由意外支持的。在hive-style从<表>选择< expr >
,选择
条款是不可忽视的。Hive和Presto都不支持这种语法。因此,从Spark 3.0开始,我们将这些查询视为无效。Spark 3.0以来,Dataset和DataFrame API
unionAll
不再弃用。的别名联盟
.在Spark 2.4及更早的版本中,JSON数据源的解析器将一些数据类型的空字符串视为null,例如
IntegerType
.为FloatType
而且倍增式
,它在空字符串上失败并抛出异常。自Spark 3.0以来,我们不允许空字符串,并将对数据类型抛出异常StringType
而且BinaryType
.从Spark 3.0开始,
from_json
函数支持两种模式-宽容的
而且FAILFAST
.模式可以通过模式
选择。默认模式变成了宽容的
.的行为from_json
都不符合吗宽容的
orgydF4y2BaFAILFAST,
特别是在处理格式错误的JSON记录时。例如,JSON字符串{“a”1}
使用模式一个INT
转换为零
Spark 3.0将其转换为行(空)
.
DDL语句
在Spark 3.0中
创建表格
的值spark.sql.sources.default
作为其提供者。在Spark 2.4及以下版本中,它是Hive。若要恢复Spark 3.0之前的行为,可以设置spark.sql.legacy.createHiveTableByDefault.enabled
来真正的
.在Spark 3.0中,当将一个值插入到具有不同数据类型的表列中时,类型强制转换将按照ANSI SQL标准执行。某些不合理的类型转换,如转换
字符串
来int
而且双
来布尔
是不允许。如果值超出列数据类型的范围,则抛出运行时异常。在Spark 2.4及以下版本中,只要类型转换有效,就允许在表插入期间进行类型转换投
.当将超出范围的值插入到整型字段时,将插入该值的低阶位(与Java/Scala数值类型强制转换相同)。例如,如果将257插入到字节类型的字段中,结果为1。行为由选项控制spark.sql.storeAssignmentPolicy
,默认值为“ANSI”。将该选项设置为“Legacy”将恢复以前的行为。在Spark 3.0中
显示创建表格
总是返回Spark DDL,即使给定的表是Hive SerDe表。用于生成Hive DDL显示创建表格作为SERDE
命令。在Spark 3.0中,的列
字符
类型在非hive - serde表中是不允许的创建/修改表格
命令将在以下情况下失败字符
检测类型。请使用字符串
类型。在Spark 2.4及以下版本中,字符
类型被视为字符串
类型和长度参数被简单地忽略。
udf和内置函数
在Spark 3.0中,使用
org.apache.spark.sql.functions.udf (AnyRef数据类型)
默认不允许。集spark.sql.legacy.allowUntypedScalaUDF
来真正的
继续使用它。在Spark 2.4及以下版本中,如果org.apache.spark.sql.functions.udf (AnyRef数据类型)
获取一个带有原语类型参数的Scala闭包,如果输入值为空,则返回的UDF返回null。但是,在Spark 3.0中,如果输入值为空,UDF将返回Java类型的默认值。例如,瓦尔f=udf (x):Int)= >x,IntegerType),f (x美元)
如果列x为空,则在Spark 2.4及以下版本中返回null,在Spark 3.0中返回0。引入这种行为变化是因为Spark 3.0默认是用Scala 2.12构建的。在Spark 2.4及以下版本中,您可以通过内置函数创建具有重复键的映射,例如
CreateMap
,StringToMap
等。具有重复键的映射的行为是未定义的,例如,映射查找首先出现重复键,Dataset.collect
只保留最后出现的复制密钥,MapKeys
返回重复的键,等等。在Spark 3.0中,Spark抛出RuntimeException
当发现重复的密钥时。你可以设置spark.sql.mapKeyDedupPolicy
来LAST_WIN
使用last wins策略重复删除映射键。用户仍然可以从没有强制执行的数据源(例如Parquet)读取带有重复键的映射值,这种行为是未定义的。
数据源
在Spark 2.4及以下版本中,如果分区列值不能转换为相应的用户提供的模式,则将其转换为空。在3.0中,分区列值使用用户提供的模式进行验证。如果验证失败,则抛出异常。您可以通过设置禁用这种验证
spark.sql.sources.validatePartitionColumns
来假
.在Spark 2.4及以下版本中,JSON数据源的解析器将一些数据类型的空字符串视为null,例如
IntegerType
.为FloatType
,倍增式
,DateType
而且TimestampType
,它在空字符串上失败并抛出异常。Spark 3.0禁止空字符串,并将对数据类型抛出异常StringType
而且BinaryType
.以前允许空字符串的行为可以通过设置恢复spark.sql.legacy.json.allowEmptyString.enabled
来真正的
.在Spark 3.0中,如果文件或子目录在递归目录列表期间消失(也就是说,它们出现在中间列表中,但在递归目录列表的后面阶段由于并发文件删除或对象存储一致性问题而无法读取或列出),则列表将失败,并出现异常,除非
spark.sql.files.ignoreMissingFiles
是真正的
(默认错误)。在以前的版本中,这些缺失的文件或子目录将被忽略。注意,这种行为更改仅适用于最初的表文件列出期间(或刷新表格
),而不是在查询执行期间:净变化是spark.sql.files.ignoreMissingFiles
现在在表文件列出和查询计划期间服从,而不仅仅是在查询执行时。在Spark 2.4及以下版本中,CSV数据源在PERMISSIVE模式下将格式错误的CSV字符串转换为全为空的行。在Spark 3.0中,如果某些CSV列值被成功解析并转换为所需类型,则返回的行可以包含非空字段。
在Spark 3.0中,拼花逻辑类型
TIMESTAMP_MICROS
保存时默认使用时间戳
列。在Spark 2.4及以下版本中,时间戳
列保存为INT96
用拼花锉。注意一些SQL系统,如Hive 1。x和黑斑羚2。xcan only read INT96 timestamps. You can setspark.sql.parquet.outputTimestampType
作为INT96
恢复之前的行为并保持互操作性。在Spark 3.0中,当使用用户提供的模式写入Avro文件时,字段匹配的是catalyst模式和Avro模式之间的字段名,而不是位置。
查询引擎
在Spark 3.0中,如果数据集包含由自连接引起的模糊列引用,则查询失败。一个典型的例子:
瓦尔df1=…;瓦尔df2=df1.filter(…);然后df1.join (df2df1(“”)>df2(“a”))
返回一个空结果,这很令人困惑。这是因为Spark无法解析指向自连接表的Dataset列引用df1(“”)
是一样的吗df2(“”)
在火花。若要恢复Spark 3.0之前的行为,可以设置spark.sql.analyzer.failAmbiguousSelfJoin
来假
.在Spark 3.0中,以科学记数法(例如,
1 e2
)被解析为双
.在Spark 2.4及以下版本中,它们被解析为小数
.若要恢复spark 3.0之前的行为,可以设置spark.sql.legacy.exponentLiteralAsDecimal.enabled
来真正的
.在Spark 3.0中,配置
spark.sql.crossJoin.enabled
成为内部配置,默认为true。默认情况下,Spark不会在使用隐式交叉连接的SQL上引发异常。在Spark 2.4及以下版本中,float/double -0.0在语义上等于0.0,但-0.0和0.0在聚合分组键、窗口分区键和连接键中被认为是不同的值。在Spark 3.0中,此错误已修复。例如,
Seq (-0.0,0.0) .toDF (d) .groupBy (d) .count ()
返回[(0.0,2))
Spark 3.0版本[(0.0,1),(-0.0,1))
Spark 2.4及以下版本。在Spark 3.0中
时间戳
使用SQL配置将文字转换为字符串spark.sql.session.timeZone
.在Spark 2.4及以下版本中,转换使用Java虚拟机的默认时区。在Spark 3.0中,Spark使用强制转换
字符串
来日期/时间戳
与日期/时间戳进行二进制比较。先前的强制转换行为日期/时间戳
来字符串
可以通过设置恢复吗spark.sql.legacy.typeCoercion.datetimeToString.enabled
来真正的
.在Spark 2.4及以下版本中,无效的时区id将被无声地忽略并替换为GMT时区
from_utc_timestamp
函数。在Spark 3.0中,这样的时区id将被拒绝,并被Spark抛出java.time.DateTimeException
.在Spark 3.0中,prospect Gregorian calendar被用于解析、格式化和转换日期和时间戳,以及提取年、日等子组件。Spark 3.0使用Java 8 API类。时间包是基于ISO年表.在Spark 2.4及以下版本中,这些操作使用混合日历(朱利安+格里高利).这些更改影响1582年10月15日(公历)之前的日期的结果,并影响以下Spark 3.0 API:
时间戳/日期字符串的解析/格式化。这对CSV/JSON数据源和
unix_timestamp
,date_format
,to_unix_timestamp
,from_unixtime
,to_date
,to_timestamp
当使用用户指定的模式进行解析和格式化时使用。在Spark 3.0中,我们在中定义了自己的模式字符串sql-ref-datetime-pattern.md
,通过java.time.format.DateTimeFormatter
在引擎盖下面。新的实现对其输入执行严格的检查。例如,2015-07-2210:00:00
如果模式是,则不能解析时间戳yyyy-MM-dd
因为解析器不消耗整个输入。另一个例子是31/01/201500:00
方法不能解析输入dd / MM / yyyyhh: mm
模式,因为hh
预设时间范围为1-12。在Spark 2.4及以下版本中,java.text.SimpleDateFormat
用于时间戳/日期字符串转换,支持的模式在simpleDateFormat.旧的行为可以通过设置恢复spark.sql.legacy.timeParserPolicy
来遗产
.的
weekofyear
,工作日
,dayofweek
,date_trunc
,from_utc_timestamp
,to_utc_timestamp
,unix_timestamp
函数使用java.time
API用于计算年的周数,周的日数以及从/到的转换TimestampType
UTC时区的值。JDBC选项
下界
而且upperBound
转换为时间戳类型/日期类型值的方法与将字符串转换为时间戳类型/日期类型值的方法相同。转换基于预期公历和SQL配置定义的时区spark.sql.session.timeZone
.在Spark 2.4及以下版本中,转换基于混合日历(儒略历+格里高利历)和默认系统时区。格式化
时间戳
而且日期
字面值。创建类型
时间戳
而且日期
来自字符串的字面量。在Spark 3.0中,字符串转换为类型化时间/日期
字面量是通过强制转换来执行的时间/日期
值。例如,时间戳“2019-12-2312:59:30”
语义上等于铸造(' 2019-12-2312:59:30”作为时间戳)
.当输入字符串不包含时区信息时,从SQL配置中获取时区spark.sql.session.timeZone
在这种情况下使用。在Spark 2.4及以下版本中,转换基于JVM系统时区。默认时区的不同来源可能会改变键入的行为时间戳
而且日期
字面值。
Apache蜂巢
在Spark 3.0中,我们将内置的Hive版本从1.2升级到2.3,带来的影响如下:
你可能需要设置
spark.sql.hive.metastore.version
而且spark.sql.hive.metastore.jars
根据你要连接的蜂巢亚稳态的版本。例如:setspark.sql.hive.metastore.version
来1.2.1 "
而且spark.sql.hive.metastore.jars
来maven
如果你的Hive metastore版本是1.2.1。您需要将您的自定义SerDes迁移到Hive 2.3或构建您自己的Spark
蜂巢- 1.2
概要文件。看到蜂巢- 15167欲知详情。使用时,十进制字符串表示可以在Hive 1.2和Hive 2.3之间有所不同
变换
用于脚本转换的SQL操作符,这取决于hive的行为。在Hive 1.2中,字符串表示省略了后面的零。但在Hive 2.3中,如果需要,它总是被填充为18位,后面带零。在Databricks Runtime 7。x,when reading a Hive SerDe table, by default Spark disallows reading files under a subdirectory that is not a table partition. To enable it, set the configuration
spark.databricks.io.hive.scanNonpartitionedDirectory.enabled
作为真正的
.这不会影响Spark本机表读取器和文件读取器。
MLlib
OneHotEncoder
,在2.3中已弃用,在3.0和OneHotEncoderEstimator
现在重命名为OneHotEncoder
.org.apache.spark.ml.image.ImageSchema.readImages
,在2.3中已弃用,在3.0中被移除。使用spark.read.format('图像')
代替。org.apache.spark.mllib.clustering.KMeans.train
参数为Int运行
,在2.1中已弃用,在3.0中被移除。用不跑步的训练法代替。org.apache.spark.mllib.classification.LogisticRegressionWithSGD
,在2.0中已弃用,在3.0中已删除org.apache.spark.ml.classification.LogisticRegression
orgydF4y2Baspark.mllib.classification.LogisticRegressionWithLBFGS
代替。org.apache.spark.mllib.feature.ChiSqSelectorModel.isSorted
,在2.1中已弃用,在3.0中被移除,不打算供子类使用。org.apache.spark.mllib.regression.RidgeRegressionWithSGD
,在2.0中已弃用,但在3.0中已被移除。使用org.apache.spark.ml.regression.LinearRegression
与elasticNetParam=0.0
.注意默认值regParam
等于0.01RidgeRegressionWithSGD
,但为0.0LinearRegression
.org.apache.spark.mllib.regression.LassoWithSGD
,在2.0中已弃用,但在3.0中已被移除。使用org.apache.spark.ml.regression.LinearRegression
与elasticNetParam=1.0
.注意默认值regParam
等于0.01LassoWithSGD
,但为0.0LinearRegression
.org.apache.spark.mllib.regression.LinearRegressionWithSGD
,在2.0中已弃用,但在3.0中已被移除。使用org.apache.spark.ml.regression.LinearRegression
orgydF4y2BaLBFGS
代替。org.apache.spark.mllib.clustering.KMeans.getRuns
而且setRuns
,在2.1中已弃用,在3.0中被移除,并且自Spark 2.0.0以来没有任何影响。org.apache.spark.ml.LinearSVCModel.setWeightCol
,它在2.4中已弃用,在3.0中被移除,不适合用户使用。在3.0中,
org.apache.spark.ml.classification.MultilayerPerceptronClassificationModel
扩展MultilayerPerceptronParams
暴露训练参数。结果,层
在MultilayerPerceptronClassificationModel
已从数组(Int)
来IntArrayParam
.你应该使用MultilayerPerceptronClassificationModel.getLayers
而不是MultilayerPerceptronClassificationModel.layers
检索层的大小。org.apache.spark.ml.classification.GBTClassifier.numTrees
,在2.4.5中已弃用,在3.0中被移除。使用getNumTrees
代替。org.apache.spark.ml.clustering.KMeansModel.computeCost
,在2.4中已弃用,在3.0中被移除ClusteringEvaluator
代替。中的成员变量精度
org.apache.spark.mllib.evaluation.MulticlassMetrics
,在2.0中已弃用,但在3.0中已被移除。而是使用准确性。成员变量召回
org.apache.spark.mllib.evaluation.MulticlassMetrics
,在2.0中已弃用,但在3.0中已被移除。使用精度
代替。成员变量
fMeasure
在org.apache.spark.mllib.evaluation.MulticlassMetrics
,在2.0中已弃用,但在3.0中已被移除。使用精度
代替。org.apache.spark.ml.util.GeneralMLWriter.context
,在2.0中已弃用,但在3.0中已被移除。使用会话
代替。org.apache.spark.ml.util.MLWriter.context
,在2.0中已弃用,但在3.0中已被移除。使用会话
代替。org.apache.spark.ml.util.MLReader.context
,在2.0中已弃用,但在3.0中已被移除。使用会话
代替。摘要类UnaryTransformer (,出来,T<:UnaryTransformer (,出来,T]]
变为摘要类UnaryTransformer (:类型标签,:类型标签,T<:UnaryTransformer (,出来,T]]
在3.0。在Spark 3.0中,Pyspark中的多类逻辑回归现在将(正确地)返回
LogisticRegressionSummary
,而不是子类BinaryLogisticRegressionSummary
.所暴露的附加方法BinaryLogisticRegressionSummary
在这种情况下不管用。(火星- 31681)在Spark 3.0中
pyspark.ml.param.shared.Has *
Mixins不提供任何信息设置*(自我,值)
Setter方法,使用各自的self.set(自我。*,值)
代替。详见SPARK-29093。(火星- 29093)
其他行为变化
升级到Scala 2.12的主要变化如下:
包单元格序列化的处理方式不同。下面的示例说明了行为更改以及如何处理它。
运行
foo.bar.MyObjectInPackageCell.run ()
如下包单元格中定义的那样将触发错误java.lang.NoClassDefFoundError:可以不初始化类foo.bar.MyObjectInPackageCell美元
包喷火.酒吧情况下类MyIntStruct(int:Int)进口org.apache.火花.sql.SparkSession进口org.apache.火花.sql.功能._进口org.apache.火花.sql.列对象MyObjectInPackageCell扩展可序列化的{//因为SparkSession不能在Spark executor中创建,//下面的行触发错误//无法初始化foo.bar.MyObjectInPackageCell$ . exe类瓦尔火花=SparkSession.构建器.getOrCreate()def喷火:Int= >选项[MyIntStruct]=(x:Int)= >一些(MyIntStruct(One hundred.))瓦尔theUDF=udf(喷火)瓦尔df={瓦尔myUDFInstance=theUDF(上校(“id”))火花.范围(0,1,1,1).withColumn(“u”,myUDFInstance)}def运行():单位={df.收集().foreach(println)}}
要解决这个错误,可以使用换行
MyObjectInPackageCell
在可序列化类内部。某些情况下使用
DataStreamWriter.foreachBatch
将需要一个源代码更新。这个变化是由于Scala 2.12具有从lambda表达式到SAM类型的自动转换,这可能会导致歧义。例如,下面的Scala代码无法编译:
流.writeStream.foreachBatch{(df,id)= >myFunc(df,id)}
若要修复编译错误,请更改
foreachBatch{(df,id)= >myFunc (df,id)}
来foreachBatch (myFunc_)
或者显式地使用Java API:foreachBatch(新VoidFunction2…)
.
随着AWS SDK升级到1.11.655,使用
org.apache.hadoop.fs.s3native.NativeS3FileSystem
需要AWS Signature v4和桶端点设置。如果用户已将AWS Signature v2配置为使用S3N文件系统对S3的请求进行签名,或者用户访问包含“+”字符的S3路径并使用旧的S3N文件系统(例如S3N://bucket/path/+文件),则可能抛出403 Forbidden错误。
由于处理Hive自定义函数和Hive SerDes的Apache Hive版本升级到2.3,需要进行以下两个修改:
蜂巢的
SerDe
接口被抽象类替换AbstractSerDe
.对于任何自定义HiveSerDe
实现,迁移到AbstractSerDe
是必需的。设置
spark.sql.hive.metastore.jars
来内装式
这意味着Hive 2.3的metastore客户端将被用来访问Databricks Runtime 7.x的metastore。如果需要访问基于Hive 1.2的外部亚metastore,请设置spark.sql.hive.metastore.jars
到包含Hive 1.2 jar的文件夹。
弃用和删除
数据跳跃索引在Databricks Runtime 4.3中已弃用,在Databricks Runtime 7.x中已移除。我们建议您改用Delta表,它提供改进的数据跳过功能.
在Databricks Runtime 7。x,the underlying version of Apache Spark uses Scala 2.12. Since libraries compiled against Scala 2.11 can disable Databricks Runtime 7.x clusters in unexpected ways, clusters running Databricks Runtime 7.x do not install配置为安装在所有集群上的库.集群库选项卡显示状态
跳过
以及一条解释库处理更改的弃用消息。但是,如果您有一个在早期版本的Databricks Runtime上创建的集群在Databricks平台3.20版bob体育客户端下载本发布到您的工作空间之前,现在编辑该集群以使用Databricks Runtime 7。x,一个ny libraries that were configured to be installed on all clusters will be installed on that cluster. In this case, any incompatible JARs in the installed libraries can cause the cluster to be disabled. The workaround is either to clone the cluster or to create a new cluster.
org.apache.hadoop.fs.s3native.NativeS3FileSystem
而且org.apache.hadoop.fs.s3.S3FileSystem
不再支持访问S3。我们强烈建议您使用
com.databricks.s3a.S3AFileSystem
,这是默认的s3a: / /
,s3: / /
,s3n: / /
Databricks Runtime中的文件系统方案。如果您需要迁移到com.databricks.s3a.S3AFileSystem
,请联系Databricks支持或您的Databricks代表。