我在hive 3.1.3
中创建了一个表,如下所示:
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
Hive配置为使用Tez。
如果我对parquet
压缩zstd
做同样的事情,它就可以工作。
我该怎么办?
1条答案
按热度按时间pxq42qpu1#
根本原因:
Apache Hive版本
3.1.3
使用的是orc
版本1.5.8
,请看这里。从1.6.0
开始,orc
已经支持zstd
解压缩; https://issues.apache.org/jira/browse/ORC-363。你可以在这里看到
1.5.8
枚举常量,在这里看到1.6.0
。因此,在这种情况下,我们可以说Hive3.1.3
不支持Tblproperties(orc.compress=zstd)
。可能的解决方案:
在Hive中,
orc
版本已经升级到1.6.0
以上的4.0.0-alpha-1
版本(此处为https://issues.apache.org/jira/browse/HIVE-23553)。这可能很有挑战性,但您可以在发布标签
3.1.3
上反向移植相关提交,然后构建项目并替换Hive库中的相关jar。请注意,
orc
依赖项不仅直接在Hive的库中,而且还包含在一些fat jar中,如hive-exec
。因此,步骤应如下:
1.克隆
hive
并 checkout 以释放标记3.1.3
。orc
升级到所需版本的提交1.构建项目
mvn clean package -DskipTests
。grep
orc
在安装hive的hive库中,可以直接在classpath中查看哪些orc
依赖项,以及哪些fat jar具有orc
类。1.替换上一步中确定的jar。
具有挑战性的部分是
orc
升级提交可能非常大,并且可能存在冲突。