hadoop 当向ORC压缩ZSTD表插入数据时,“No enum constant org.apache.orc.CompressionKind.ZSTD”

2nc8po8w  于 12个月前  发布在  Hadoop
关注(0)|答案(1)|浏览(306)

我在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做同样的事情,它就可以工作。
我该怎么办?

pxq42qpu

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。因此,在这种情况下,我们可以说Hive 3.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

  1. Backport将orc升级到所需版本的提交
    1.构建项目mvn clean package -DskipTests
  2. greporc在安装hive的hive库中,可以直接在classpath中查看哪些orc依赖项,以及哪些fat jar具有orc类。
    1.替换上一步中确定的jar。
    具有挑战性的部分是orc升级提交可能非常大,并且可能存在冲突。

相关问题