You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决HDInsight 5.1读取Databricks Delta表的版本兼容问题

问题描述

在HDInsight Spark集群(版本5.1)上读取Databricks生成的Delta表时,遇到以下错误:

org.apache.spark.sql.delta.actions.InvalidProtocolVersionException: Delta protocol version is too new for this version of the Databricks Runtime. Please upgrade to a newer release.

当前环境信息:

  • HDInsight版本:5.1(最新),Delta Lake版本为2.2.0.4,可通过以下Scala代码确认:
import io.delta
println(io.delta.VERSION)
  • Databricks侧:可选最旧Runtime版本为12.2,目标Delta表的属性如下:
keyvalue
delta.feature.deletionVectorssupported
delta.minReaderVersion3
delta.minWriterVersion7

上述协议版本需Delta Lake 2.3及以上支持,核心原因是启用了deletionVectors特性。已在DBR 12.2、15.4、16.4中尝试以下SQL语句创建表,但仍无法生成兼容HDInsight 5.1的Delta表:

create or replace table my_schema.my_table as (values 1,2,3 as t(x))

create or replace table my_schema.my_table TBLPROPERTIES ('delta.feature.deletionVectors' = false) as (values 1,2,3 as t(x))

create or replace table my_schema.my_table TBLPROPERTIES ('delta.enableDeletionVectors' = false, 'delta.minReaderVersion' = '1', 'delta.minWriterVersion' = '1') as (values 1,2,3 as t(x))

需求:

  1. 如何让Databricks生成兼容HDInsight 5.1的Delta表(比如禁用deletionVectors)?
  2. 是否有简便方法在HDInsight 5.1上安装Delta Lake 2.3?

方案一:在Databricks中生成兼容HDInsight 5.1的Delta表

1. 集群全局禁用Deletion Vectors

在Databricks集群的Spark配置中添加以下参数,全局关闭Deletion Vectors特性:

spark.databricks.delta.deletionVectors.enabled false

添加路径:集群配置 → Spark → 高级选项 → Spark配置,添加上述键值对。重启集群后,新创建的表默认不会启用Deletion Vectors,协议版本会回退到Delta 2.2兼容的范围。

2. 表级别强制指定兼容协议与特性

创建表时,明确指定兼容的协议版本(Delta 2.2支持minReaderVersion=2、minWriterVersion=5),同时禁用Deletion Vectors:

CREATE OR REPLACE TABLE my_schema.my_table 
TBLPROPERTIES (
  'delta.enableDeletionVectors' = 'false',
  'delta.minReaderVersion' = '2',
  'delta.minWriterVersion' = '5'
) AS (VALUES 1,2,3 AS t(x))

注意:delta.feature.deletionVectors是表创建后自动生成的属性,无法直接通过TBLPROPERTIES设置,需通过delta.enableDeletionVectors参数禁用。

3. 对已存在的表降级协议版本

如果表已创建,可通过ALTER TABLE修改属性并执行优化更新元数据:

ALTER TABLE my_schema.my_table 
SET TBLPROPERTIES (
  'delta.enableDeletionVectors' = 'false',
  'delta.minReaderVersion' = '2',
  'delta.minWriterVersion' = '5'
);

OPTIMIZE my_schema.my_table;

执行后确认表属性中的协议版本已调整为兼容值,且delta.feature.deletionVectors变为unsupported。


方案二:在HDInsight 5.1上升级Delta Lake到2.3

1. 作业级别加载Delta 2.3依赖

提交Spark作业时,通过--packages指定Delta 2.3依赖,同时配置相关扩展:

spark-submit \
  --packages io.delta:delta-core_2.12:2.3.0 \
  --conf spark.sql.extensions=io.delta.sql.DeltaSparkSessionExtension \
  --conf spark.sql.catalog.spark_catalog=org.apache.spark.sql.delta.catalog.DeltaCatalog \
  --conf spark.delta.logStore.class=org.apache.spark.sql.delta.storage.HDFSLogStore \
  your_job_script.py

注意:HDInsight 5.1使用Scala 2.12、Spark 3.3,需匹配对应版本的Delta包(delta-core_2.12:2.3.0对应Spark 3.3)。

2. 集群全局安装Delta 2.3

若需所有作业默认使用Delta 2.3,可通过Ambari修改集群配置:

  1. 登录HDInsight集群的Ambari界面。
  2. 进入Spark服务 → 配置 → 高级 → spark-defaults。
  3. 添加以下配置:
    • spark.jars.packages:io.delta:delta-core_2.12:2.3.0
    • spark.sql.extensions:io.delta.sql.DeltaSparkSessionExtension
    • spark.sql.catalog.spark_catalog:org.apache.spark.sql.delta.catalog.DeltaCatalog
  4. 重启Spark服务及相关组件。

注意事项

  • 升级Delta版本后,需验证作业API与Delta 2.3的兼容性,避免API变更导致错误。
  • 优先在单个作业中测试,确认无误后再全局配置,避免影响现有业务。

内容的提问来源于stack exchange,提问作者TrayMan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 07:06:07