在vectorized.execution.enabled时使用带有Hive的ORC文件格式时出现ClassCastException

时间:2016-08-01 14:17:41

标签: hadoop mapreduce hive

我有一个包含以下属性的配置单元表 -

  • ORC存储格式
  • transactional = true
  • 分为4个键 - 年,月,日,小时
  • groupingKey
  • 发布

我正在使用Hive Streaming将数据直接填充到表格中。

现在我的问题是 - 我正在尝试运行以下查询

select count(*) from table_name;

我遇到了异常

Caused by: java.lang.ClassCastException:    org.apache.hadoop.hive.ql.io.orc.OrcStruct$OrcStructInspector cannot be cast to org.apache.hadoop.hive.serde2.objectinspector.PrimitiveObjectInspector
at org.apache.hadoop.hive.ql.exec.vector.VectorizedBatchUtil.setVector(VectorizedBatchUtil.java:295)
at org.apache.hadoop.hive.ql.exec.vector.VectorizedBatchUtil.acidAddRowToBatch(VectorizedBatchUtil.java:275)
at org.apache.hadoop.hive.ql.io.orc.VectorizedOrcAcidRowReader.next(VectorizedOrcAcidRowReader.java:82)

但是,如果我通过设置以下属性来关闭矢量化执行

set hive.vectorized.execution.enabled = false;

一切正常(尽管需要很长时间才能完成)。

为什么会这样?根据我的理解,使用ORC格式,矢量化执行应该有效。

Hadoop版本 - 2.7.1

Hive版本 - 1.2.1

1 个答案:

答案 0 :(得分:1)

好像这个hive问题已被关闭/修复。请重新检查您使用的hive版本。

请检查Vectorized execution causes ClassCastException

enter image description here