我有Kinesis流,我的应用程序以原始格式每秒向其中写入约1万条消息。
我想将这些消息以拼花格式保存到S3。为了以后方便搜索,我需要按消息中的用户ID字段对数据进行分区。
当前,我有一个由Kinesis事件触发的lambda函数。它可以接收多达1万条消息,并按用户ID对其进行分组,然后将这些文件以拼写格式写入S3。
我的问题是,此lambda函数生成的文件很小,约为200KB,而我想创建约200MB的文件以提高查询性能(我使用AWS Athena查询这些文件)。
天真的方法是编写另一个lambda函数来读取这些文件并将它们合并(汇总)到一个大文件中,但是我觉得我缺少了一些东西,必须有一种更好的方法。
我想知道是否应该按照this问题中所述使用Spark。
答案 0 :(得分:0)
也许您可以使用来自AWS的两项附加服务:
AWS Kinesis Data Analytics 可以使用Kinesis Stream中的数据并针对您的数据(组,过滤器等)生成SQL分析。在此处查看更多信息:https://aws.amazon.com/kinesis/data-analytics/
在Kinesis Data Analytics之后插入了AWS Kinesis Firehose 。使用此服务,我们可以每隔X分钟或每Y MB在s3上使用收到的数据创建一个拼花文件。在此处查看更多信息:https://docs.aws.amazon.com/firehose/latest/dev/what-is-this-service.html
第二种方法是使用Spark结构化流。因此,您可以从AWS Kinesis Stream中读取信息,过滤不可用的数据并按以下说明导出到s3: https://databricks.com/blog/2017/08/09/apache-sparks-structured-streaming-with-amazon-kinesis-on-databricks.html
P.S .:此示例显示了如何输出到本地文件系统,但是您可以将其更改为s3位置。