Hive无法反序列化AVRO文件,但反序列化在本地有效

时间:2020-04-08 21:30:43

标签: java hadoop hive avro

我在S3存储桶中有一些文件,我通过Hive在它们上面创建了一个外部表。这些文件遵循Avro格式。

我可以使用我引用的相同模式在本地反序列化这些文件,并且可以正常工作:

用于Avro反序列化的Java代码

    Schema schema = new Schema.Parser().parse(new File("schema_path.avsc"));
    DatumReader<SpecificRecord> datumReader = new SpecificDatumReader<>(schema);
    DataFileReader<SpecificRecord> dataFileReader = new DataFileReader<>(new File("avro_file.avro"), datumReader);
    SpecificRecord record = null;

    while (dataFileReader.hasNext()) {
      record = dataFileReader.next(record);
      System.out.println(record);
    }

配置单元表创建

CREATE EXTERNAL TABLE `test_db.test_avro_table`
ROW FORMAT SERDE 
  'org.apache.hadoop.hive.serde2.avro.AvroSerDe' 
STORED AS INPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.avro.AvroContainerInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.avro.AvroContainerOutputFormat'
LOCATION
  's3://dir/data/'
TBLPROPERTIES (
  'avro.schema.url'='s3://dir/schema.avsc')

当我尝试查看数据或仅在表上执行select语句时,出现以下错误:

Error in fetching data rows: *org.apache.hive.service.cli.HiveSQLException:java.io.IOException: org.apache.avro.AvroTypeException: Found com.class.thing, expecting union:44:43;

我很困惑,为什么使用我在此测试中引用的相同文件和相同模式,通过Java在本地进行反序列化而不会失败。

0 个答案:

没有答案
相关问题