如何在 Hive CDH 中创建 ORC 文件?

Posted

技术标签:

【中文标题】如何在 Hive CDH 中创建 ORC 文件?【英文标题】:How to create an ORC file in Hive CDH? 【发布时间】:2014-02-16 04:17:40 【问题描述】:

我可以在 Apache Hadoop 或 Hortonworks 的 HDP 中轻松创建 ORC 文件格式:

CREATE TABLE ... STORED AS ORC

但这在 Cloudera 的 CDH 4.5 中不起作用。 (惊喜!)我明白了:

失败:SemanticException STORED AS 子句中无法识别的文件格式:ORC

因此,作为替代方案,我尝试下载并安装包含 ORC 类的 Hive jar:

hive> add jar /opt/cloudera/parcels/CDH-4.5.0-1.cdh4.5.0.p0.30/lib/hive/lib/hive-exec-0.11.0.jar;

然后创建我的 ORC 表:

hive>    CREATE TABLE test (name STRING)

> row format serde
> 'org.apache.hadoop.hive.ql.io.orc.OrcSerde'
>  stored as inputformat
>   'org.apache.hadoop.hive.ql.io.orc.OrcInputFormat'   
>   outputformat
>   'org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat';
OK

但从一些 CSV 数据插入此表时,出现错误:

hive> INSERT OVERWRITE TABLE test 
> SELECT name FROM textdata;

    Diagnostic Messages for this Task:
java.lang.RuntimeException: Error in configuring object
    at org.apache.hadoop.util.ReflectionUtils.setJobConf(ReflectionUtils.java:109)
    at org.apache.hadoop.util.ReflectionUtils.setConf(ReflectionUtils.java:75)
    at org.apache.hadoop.util.ReflectionUtils.newInstance(ReflectionUtils.java:133)
    at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:413)

我应该如何在 CDH 中的 Hive 中创建 ORC 表?

【问题讨论】:

【参考方案1】:

CDH 4.5 包含 Hive 0.10,请参阅 CDH Version 4.5.0 Packaging and Tarballs。在 Hive 0.11 中添加了 ORC,请参阅 release notes 和 HIVE-3874: Create a new Optimized Row Columnar file format for Hive。

CDH 5 现在处于 Beta 版,但它确实包含 Hive 0.11,请参阅 CDH Version 5.0.0 Beta 1。

【讨论】:

以上是关于如何在 Hive CDH 中创建 ORC 文件?的主要内容,如果未能解决你的问题,请参考以下文章

从以 orc 格式存储在 hdfs 中的文件创建配置单元表

Hive Streaming 追加 ORC 文件

如何在写入hive orc表时合并spark中的小文件

如何使用Phoenix在CDH的HBase中创建二级索引

在 HIVE 中使用 CDH 5.4 和 Spark 1.3.0 和 Parquet 表的 PySpark 中的 Parquet 错误

如何加载分区到 Hbase 表的 hive orc