用java将不同类型的数据序列化为ORC格式



我能够将CSV数据转换为ORC格式。但根据新的要求,我的应用程序需要序列化输入数据,这些数据可以是任何格式,如CSV、Avro等,。。转换成ORC作家可以理解的格式,并将其写成卡夫卡主题。稍后,我的应用程序或其他应用程序需要从kafka主题中读取这些数据,并将其写入ORC文件。输入数据作为属性包含在对象中,同一对象具有定义为另一属性的ORC模式。

如果你已经可以从CSV/Avro/etc源创建ORC格式,你可以创建小的ORC文件,比如每个大约10MB,你可以使用自己的序列化方法将它们填充到Kafka中,比如谷歌协议缓冲区:https://developers.google.com/protocol-buffers/docs/overview

您可以在自己的字段(文件名、路径/目录等(中定义元数据,并将实际的二进制ORC文件作为一个简单的字节数组发送。

在Kafka消费者端,无论谁使用消息,都只需要使用protobuf模式对它们进行反序列化,并将接收到的字节数组存储为HDFS/S3/etc文件,并使用适当的文件名、路径等。这里的一大优势是protobuf和Kafka不在乎你在字节数组字段中发送什么。它可以是纯文本,也可以是ORC、二进制AVRO等。只要您在目标目标存储中正确命名它们,它们就应该可以工作。

几个注意事项:

  • 您需要调整kafka安装中的默认值,以允许大于1MB的消息,这是最大大小的默认值。请务必查看此答案以更改所有必需的配置值:如何使用Kafka发送大型消息(超过15MB(?

  • 如果下游有Hive,请确保正确定义Hive表(使用ORC格式、Avro、镶木地板、文本等(,以便它们可读。

  • 如果你试图将这些文件与HDFS或EMR/S3存储一起使用,那么较小的文件(每个文件小于100MB(就不能很好地工作,尤其是当你有大量数据时。因此,作为最后一步,您可能希望在传输过程完成后合并文件。

最新更新