Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon s3 如何将数据从AmazonSQS流式传输到AmazonS3中的文件_Amazon S3_Amazon Sqs - Fatal编程技术网

Amazon s3 如何将数据从AmazonSQS流式传输到AmazonS3中的文件

Amazon s3 如何将数据从AmazonSQS流式传输到AmazonS3中的文件,amazon-s3,amazon-sqs,Amazon S3,Amazon Sqs,如何快速创建从Amazon SQS读取json数据并将其保存在s3 bucket中的avro文件(可能是其他格式)中的机制,并按json消息中给定字段的日期和值进行分区?您可以编写一个AWS Lambda函数,该函数由发送到Amazon SQS队列的消息触发。您负责编写代码,因此答案是这取决于您的编码技能 但是,如果单独处理每条消息,那么每个SQS消息都会有一个AmazonS3对象,这是非常低效的。文件采用Avro格式这一事实与此无关,因为每个文件都非常小。这将在处理文件时增加大量开销 另一种方

如何快速创建从Amazon SQS读取json数据并将其保存在s3 bucket中的avro文件(可能是其他格式)中的机制,并按json消息中给定字段的日期和值进行分区?

您可以编写一个AWS Lambda函数,该函数由发送到Amazon SQS队列的消息触发。您负责编写代码,因此答案是这取决于您的编码技能

但是,如果单独处理每条消息,那么每个SQS消息都会有一个AmazonS3对象,这是非常低效的。文件采用Avro格式这一事实与此无关,因为每个文件都非常小。这将在处理文件时增加大量开销

另一种方法是将消息发送到Amazon Kinesis数据流,该数据流可以按大小(例如每5MB)或时间(例如每5分钟)将消息聚合在一起。这将导致S3中的对象更少、更大,但它们不会被分区,也不会采用Avro格式

为了从Avro等列格式中获得最佳性能,将数据合并到更大的文件中,以提高处理效率。例如,您可以使用Kinesis来收集数据,然后每天使用Amazon EMR作业将这些文件合并到分区的Avro文件中

所以,答案是:“这很容易,但你可能不想这么做。”


您的问题没有定义数据如何进入SQS。如果您不希望在消息到达后立即处理消息,而是希望数据在SQS中积累一段时间(例如1小时或1天),那么您可以编写一个程序,读取所有消息并将其输出到分区的Avro文件中。这使用SQS作为临时保留区,允许在处理之前积累数据。但是,它将失去任何实时报告功能。

您的问题没有太多细节,因此很难给出太多答案。有关提出好问题的提示,请参阅:Kinesis交付流不支持自定义分区。它按摄取时间(yyyy/mm/dd/hh)对数据进行分区。我想设置AmazonAthena或ApacheHive来使用s3上的数据。对于我的组件生成的数据量(400K条记录/分钟),EMR似乎有点过头了。t3.micro上的自定义Java应用程序能够处理它。我认为AWS中可能存在一些开箱即用的机制,因此我不需要重新发明轮子。在lambda体系结构中,向主数据集添加数据是一项非常常见的任务。