如何处理串联的Avro文件?

时间:2015-11-25 19:27:52

标签: apache-spark bigdata avro amazon-kinesis amazon-kinesis-firehose

我正在以Apache Avro格式存储从我的Web应用程序生成的数据。数据被编码并发送到Apache Kinesis Firehose,每隔300秒左右缓冲并将数据写入Amazon S3。由于我有多个Web服务器,因此会将多个Avro文件块发送到Kinesis,然后连接并定期将它们写入S3。

当我从S3获取文件时,我无法使用普通的Avro工具对其进行解码,因为它实际上是多个文件。我可以添加一个分隔符,但是如果记录的数据也具有相同的分隔符,那么这似乎有风险。

处理这个问题的最佳方法是什么?我在标准中找不到任何支持多个Avro文件连接到同一文件的内容。

1 个答案:

答案 0 :(得分:3)

看起来目前firehose不提供任何支持来处理您的用例,但它可以使用常规的kinesis流。

您可以将数据发送到kinesis流,而不是发送到firehose, 你定义了自己的AWS Lambda函数(带有kinesis事件源),它从流中读取数据并将其作为Avro文件写入S3,这里你不会遇到firehose的问题,因为你已经知道它的avro格式(和您可能拥有架构),因此您可以正确解码/编码(并立即将文件写入S3)