蜂房3.1+不从卡夫卡反序列化的Avro 1.8.3+消息1.0+

问题描述 投票:0回答:1

可以说我有通过卡夫卡创造话题从铺满其中包含的Avro序列化与io.confluent.kafka.streams.serdes.avro.SpecificAvroSerializer信息流

然后,我创建的蜂巢外部卡夫卡表

CREATE EXTERNAL TABLE k_table
(`id` string , `sequence` int) 
STORED BY 'org.apache.hadoop.hive.kafka.KafkaStorageHandler' 
TBLPROPERTIES 
( 
  "kafka.topic" = "sample-topic", 
  "kafka.bootstrap.servers"="kafka1:9092", 
  "kafka.serde.class"="org.apache.hadoop.hive.serde2.avro.AvroSerDe", 
  "avro.schema.url"="Sample.avsc"

);

当我运行查询:

select * from k_table WHERE `__timestamp` >  1000 * to_unix_timestamp(CURRENT_TIMESTAMP - interval '2' DAYS)

我得到了意外的IO错误:

INFO  : Executing command(queryId=root_20190205160129_4579b5ff-9a5c-496d-8d03-9a7ccc0f6d90): select * from k_tickets_prod2 WHERE `__timestamp` >  1000 * to_unix_timestamp(CURRENT_TIMESTAMP - interval '1' minute)
INFO  : Completed executing command(queryId=root_20190205160129_4579b5ff-9a5c-496d-8d03-9a7ccc0f6d90); Time taken: 0.002 seconds
INFO  : Concurrency mode is disabled, not creating a lock manager
Error: java.io.IOException: java.lang.ArrayIndexOutOfBoundsException: 55 (state=,code=0)

那么一切工作正常与汇合卡夫卡的消费者,也是我试图建立融合卡夫卡解串器在TBLPROPERTIES这似乎有效果。

环境:

Hive 4.0 + Beeline 3.1.1 + Kafka 1.1 (Clients & Broker) + Confluent 4.1
hive apache-kafka hiveql avro confluent
1个回答
1
投票

问题是铺满生产序列化的自定义格式<magic_byte 0x00><4 bytes of schema ID><regular avro bytes for object that conforms to schema> Avro的消息。所以蜂巢卡夫卡处理有问题的反序列化cuz它使用基本字节组卡夫卡解串器,并在邮件的开头这5个字节是意想不到的。

我创建了一个bug在蜂巢支持汇合格式和架构注册表以及和我也做了一个PR with quick fix "avro.serde.magic.bytes"="true"属性在TBLPROPERTIES设置之后,可以消除信息5个字节。

这个补丁后,它就像魅力。

© www.soinside.com 2019 - 2024. All rights reserved.