我可以在 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 表?