Hive 3.1.3插入ORC ZSTD压缩表报错No enum constant org.apache.orc.CompressionKind.ZSTD
解决Hive 3.1.3中ORC格式ZSTD压缩插入报错问题
问题场景
在Hive 3.1.3(Tez引擎)中创建外部ORC表并指定ZSTD压缩:
CREATE EXTERNAL TABLE test_tez_orc_zstd ( Id bigint ) STORED AS ORC TBLPROPERTIES('orc.compress'='zstd') LOCATION '...';
表创建成功后执行插入语句:
INSERT INTO test_tez_orc_zstd SELECT 1;
抛出错误:
No enum constant org.apache.orc.CompressionKind.ZSTD
注:Parquet格式配置ZSTD压缩时可正常运行。
解决方案
1. 修正压缩参数的大小写
ORC的CompressionKind枚举中,ZSTD的枚举值为大写的ZSTD,Hive在映射表属性时可能严格匹配大小写。执行以下语句修改表属性:
ALTER TABLE test_tez_orc_zstd SET TBLPROPERTIES ('orc.compress'='ZSTD');
修改后重新执行插入操作,验证是否解决问题。
2. 检查并升级ORC版本
Hive 3.1.3默认依赖的ORC版本可能较低,ORC 1.4.0及以上版本才正式支持ZSTD压缩。
- 查看当前ORC jar包版本:在Hive或Tez的lib目录下找到
orc-core-*.jar,确认版本号。 - 若版本低于1.4.0,升级到兼容Hive 3.1.3的ORC版本(如1.5.x或1.6.x系列),替换Hive和Tez lib目录中的旧ORC jar包,重启Hive服务后重试。
3. 确保Tez的ClassPath包含正确的ORC jar包
由于使用Tez引擎,需确认Tez的ClassPath加载了支持ZSTD的ORC jar包:
- 检查Tez的lib目录下的ORC jar版本是否与Hive一致,若不一致则替换为同版本的支持ZSTD的ORC jar。
- 分布式部署场景下,确保
tez.lib.uris配置指向的路径下包含正确的ORC jar包。
4. 使用全局压缩配置替代表级别配置
若表级别配置仍有问题,可通过Hive全局参数指定ORC压缩方式:
SET hive.exec.orc.compress=ZSTD; SET hive.exec.orc.compression.strategy=COMPRESSION;
执行上述配置后,重新创建表或插入数据,Hive会使用全局配置的压缩策略。
内容的提问来源于stack exchange,提问作者CompEng
相关产品推荐
相关产品推荐

