使用 ORC 格式的 LZO 压缩

Posted

技术标签:

【中文标题】使用 ORC 格式的 LZO 压缩【英文标题】:LZO compression with ORC format 【发布时间】:2015-06-02 08:40:59 【问题描述】:

我正在尝试将一些非常大的 Hive 表从文本格式转换为 ORC 格式,希望它会占用更少的存储空间并且查询会更快。由于我们使用 LZO 作为整个资产的压缩,因此我也尝试将其用于 ORC 格式。

如果你们能提供任何帮助,我将不胜感激。

我正在使用 Hadoop 2.4.0 和 Hive 0.13.1

根据下面的链接,似乎应该可以:

http://2013.berlinbuzzwords.de/sessions/orc-file-improving-hive-data-storage https://hive.apache.org/javadocs/r1.1.0/api/ql/org/apache/hadoop/hive/ql/io/orc/package-summary.html

但是当我做类似的事情时

create table sa_orc_lzo 
stored as orc  tblproperties ("orc.compress"="LZO")  
as select * from sa;

我收到以下错误:

Caused by: org.apache.hadoop.hive.ql.metadata.HiveException: Hive Runtime Error while processing row "data".......
at org.apache.hadoop.hive.ql.exec.MapOperator.process(MapOperator.java:550)
at org.apache.hadoop.hive.ql.exec.mr.ExecMapper.map(ExecMapper.java:177)

**Caused by: java.lang.IllegalArgumentException: LZO is not available.
at org.apache.hadoop.hive.ql.io.orc.WriterImpl.createCodec**(WriterImpl.java:200)
at org.apache.hadoop.hive.ql.io.orc.WriterImpl.<init>(WriterImpl.java:175)
at org.apache.hadoop.hive.ql.io.orc.OrcFile.createWriter(OrcFile.java:369)
at org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat$OrcRecordWriter.write(OrcOutputFormat.java:83)
at org.apache.hadoop.hive.ql.exec.FileSinkOperator.processOp(FileSinkOperator.java:649)
at org.apache.hadoop.hive.ql.exec.Operator.forward(Operator.java:793)
at org.apache.hadoop.hive.ql.exec.SelectOperator.processOp(SelectOperator.java:87)
at org.apache.hadoop.hive.ql.exec.Operator.forward(Operator.java:793)
at org.apache.hadoop.hive.ql.exec.TableScanOperator.processOp(TableScanOperator.java:92)
at org.apache.hadoop.hive.ql.exec.Operator.forward(Operator.java:793)
at org.apache.hadoop.hive.ql.exec.MapOperator.process(MapOperator.java:540)
... 9 more
**Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.hive.ql.io.orc.LzoCodec**

【问题讨论】:

有人可以帮我解决这个问题吗?非常感谢任何指导。 【参考方案1】:

不幸的是,你不能。有人需要实现 org.apache.hadoop.hive.ql.io.orc.LzoCodec 还没有完成。当我写 ORC 时,我把钩子放进去了,我打算回到它,但我还没有。目前,我的盘子里有太多东西了。我的建议是改用 Snappy。 Snappy 几乎和 LZO 一样快,而且效果很好。

它没有完成的部分原因是 LZO 是 GPL 的,因此任何与它的绑定都必须在 GPL 下发布。由于 Apache 许可证与 GPL 不兼容,因此无法在 Apache 上托管绑定。

【讨论】:

通过 ORC 项目的实现,您现在可以使用 LZO。 ORC 项目的版本用于 Hive 2.3 及更高版本。通过一些工作,您可以将它与 Hive 2.1 和 Hive 2.2 一起使用

以上是关于使用 ORC 格式的 LZO 压缩的主要内容,如果未能解决你的问题,请参考以下文章

总结spark按文本格式和Lzo格式处理Lzo压缩文件的比较

Spark SQL - gzip vs snappy vs lzo 压缩格式之间的区别

Hive文件压缩测试

[转] - hadoop中使用lzo的压缩

LZO 使用和介绍

HDFS数据定期清理