Сериализация различных типов данных в формате ORC в Java
Я могу конвертировать данные CSV в формат ORC. Но в соответствии с новым требованием, мое приложение должно сериализовать входные данные, которые могут быть в любых форматах, таких как CSV, Avro и т. Д., В понятный для ORC писатель формат и записать их в тему kafka. Позже моему приложению или другому приложению нужно будет прочитать эти данные из раздела kafka и записать их в виде файлов ORC. Входные данные заключены в объект в качестве атрибута, этот же объект имеет схему ORC, определенную в качестве другого атрибута.
1 ответ
Если вы уже можете создать формат ORC из источников CSV/Avro/etc, вы можете создать файлы ORC небольшого размера, скажем, около 10 МБ каждый, и вы можете вставить их в Kafka, используя свой собственный метод сериализации, например что-то вроде буферов протокола Google: https://developers.google.com/protocol-buffers/docs/overview
Вы можете определить метаданные в ваших собственных полях (имя файла, путь / каталог и т. Д.) И отправить фактический двоичный файл ORC в виде простого байтового массива.
Что касается потребителя Kafka, тому, кто использует сообщения, нужно только десериализовать их, используя схему protobuf, и сохранить байтовые массивы, полученные в виде файлов HDFS/S3/etc, с правильными именами файлов, путем и т. Д. Одним из больших преимуществ здесь является то, что Protobuf и Кафке не важно, что вы отправляете в поле байтового массива. Это может быть простой текст, это может быть ORC, двоичный код AVRO и т. Д. Если вы правильно называете их в целевом хранилище назначения, они должны работать.
Несколько предостережений:
Вам нужно будет изменить значения по умолчанию в установке kafka, чтобы разрешить сообщения размером более 1 МБ, что является значением по умолчанию для максимальных размеров. Обязательно посмотрите этот ответ, чтобы изменить все необходимые значения конфигурации: Как я могу отправлять большие сообщения с помощью Kafka (более 15 МБ)?
Если в Hive есть нисходящий поток, убедитесь, что таблицы Hive определены правильно (с форматом ORC, Avro, паркетом, текстом и т. Д.), Чтобы они были читабельными.
Небольшие файлы (менее 100 МБ каждый) работают не очень хорошо, если вы пытаетесь использовать эти файлы с хранилищем, например, HDFS или EMR/S3, особенно если у вас огромные объемы данных. В качестве последнего шага вы, вероятно, захотите объединить файлы после завершения процесса передачи.