Мы используем HDP 3.1.4 и хотим использовать kafka-handler для интеграции Kafka и Hive.
Многие из наших тем в Kafka сериализуются с помощью Avro с использованием реестра Confluent Schema, и поставляется стандартный обработчик kafka-handler. с HDP 3.1.4 не содержит новых функций для сообщений Avro, сериализованных с Confluent, которые содержат Magi c Byte . в новых версиях kafka-handler у нас есть некоторые свойства, такие как 'avro.serde.type'='skip'
и 'avro.serde.skip.bytes'='5'
для обработки Magi c Byte .
Поэтому мы хотели заменить kafka-handler на наши Собственный скомпилированный кафка-обработчик 4.0. мы просто начали с замены kafka-handler 4.0 на HDP kafka-handler по умолчанию, но мы столкнулись с этой ошибкой:
MetaException(message:java.lang.NoSuchFieldError AVRO_SERDE_TYPE)
AVRO_SERDE_TYPE
добавлено в hive-serde 4.0
, и мы исследуем это потому, что kafka-handler имеет зависимость kafka-exec
и kafka-exec
содержит нашу старую hive-serde
, поставляемую с HDP.
Мы также должны заменить hive-serde
. Итак, мы продолжаем с затенением hive-serde
в kafka-обработчике:
<relocation>
<pattern>org.apache.hadoop.hive.serde2</pattern>
<shadedPattern>org.shaded.apache.hadoop.hive.serde2_shaded</shadedPattern>
</relocation>
, но мы сталкиваемся с этим исключением:
SQL Error [40000] [42000]: Error while compiling
statement: FAILED: ClassCastException class org.apache.hadoop.hive.kafka.KafkaSerDe
так, как мы должны решить эту проблему?