无效的镶木地板配置架构:重复的组数组

时间:2015-03-01 01:19:42

标签: hive avro parquet

我们生产的Hadoop集群上的大多数数据集目前都存储为AVRO + SNAPPY格式。我听说Parquet有很多好东西,想试一试。

我跟着this web page,改变我们的ETL之一来生成Parquet文件,而不是Avro,作为我们的reducer的输出。我使用Parquet + Avro架构来生成最终输出数据,以及snappy编解码器。一切正常。因此,最终输出的镶木地板文件应该与我们原始的Avro文件具有相同的模式。

现在,我尝试为这些Parquet文件创建一个Hive表。目前,我们使用的IBM BigInsight 3.0包含Hive 12和Parquet 1.3.2。 基于我们的Avro架构文件,我推出了以下Hive DDL:

create table xxx {col1 bigint, col2 string,.................field1 array<struct<sub1:string, sub2:string, date_value:bigint>>,field2 array<struct<..............>>ROW FORMAT SERDE 'parquet.hive.serde.ParquetHiveSerDe' STORED AS INPUTFORMAT 'parquet.hive.DeprecatedParquetInputFormat' OUTPUTFORMAT 'parquet.hive.DeprecatedParquetOutputFormat' location 'xxxx'

该表在Hive 12中成功创建,我可以&#34; desc table&#34;没有任何问题。但是当我试图查询表格时,例如&#34;从表格限制2&#34;中选择*,我收到以下错误:

Caused by: java.lang.RuntimeException: Invalid parquet hive schema: repeated group array { required binary sub1 (UTF8); optional binary sub2 (UTF8); optional int64 date_value;} at parquet.hive.convert.ArrayWritableGroupConverter.<init>(ArrayWritableGroupConverter.java:56) at parquet.hive.convert.HiveGroupConverter.getConverterFromDescription(HiveGroupConverter.java:36) at parquet.hive.convert.DataWritableGroupConverter.<init>(DataWritableGroupConverter.java:61) at parquet.hive.convert.DataWritableGroupConverter.<init>(DataWritableGroupConverter.java:46) at parquet.hive.convert.HiveGroupConverter.getConverterFromDescription(HiveGroupConverter.java:38) at parquet.hive.convert.DataWritableGroupConverter.<init>(DataWritableGroupConverter.java:61) at parquet.hive.convert.DataWritableGroupConverter.<init>(DataWritableGroupConverter.java:40) at parquet.hive.convert.DataWritableRecordConverter.<init>(DataWritableRecordConverter.java:32) at parquet.hive.read.DataWritableReadSupport.prepareForRead(DataWritableReadSupport.java:109) at parquet.hadoop.InternalParquetRecordReader.initialize(InternalParquetRecordReader.java:142) at parquet.hadoop.ParquetRecordReader.initializeInternalReader(ParquetRecordReader.java:118) at parquet.hadoop.ParquetRecordReader.initialize(ParquetRecordReader.java:107) at parquet.hive.MapredParquetInputFormat$RecordReaderWrapper.<init>(MapredParquetInputFormat.java:230) at parquet.hive.MapredParquetInputFormat.getRecordReader(MapredParquetInputFormat.java:119) at org.apache.hadoop.hive.ql.exec.FetchOperator.getRecordReader(FetchOperator.java:439) at org.apache.hadoop.hive.ql.exec.FetchOperator.getNextRow(FetchOperator.java:522) ... 14 more

我注意到错误来自第一个嵌套的struct列数组。我的问题如下:

  1. Parquet是否支持struct的嵌套数组?
  2. 这只与Parquet 1.3.2有关吗?我对Parquet 1.3.2有什么解决方案吗?
  3. 如果我必须使用更高版本的Parquet来解决上述问题,并且如果Parquet 1.3.2在运行时可用,那会导致任何问题吗?
  4. 我可以使用各种Hive功能,例如&#34; explode&#34;巢结构,来自实木复合地板数据?
  5. 我们正在寻找的是知道镶木地板是否可以像我们目前使用AVRO一样使用,但是为我们提供了AVRO所缺少的柱状存储优势。

1 个答案:

答案 0 :(得分:0)

看起来Hive 12不支持镶木地板文件的嵌套结构,如此Jira票证所示。

https://issues.apache.org/jira/browse/HIVE-8909

相关问题