我们生产的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列数组。我的问题如下:
我们正在寻找的是知道镶木地板是否可以像我们目前使用AVRO一样使用,但是为我们提供了AVRO所缺少的柱状存储优势。
答案 0 :(得分:0)
看起来Hive 12不支持镶木地板文件的嵌套结构,如此Jira票证所示。