在Amazon S3中组合许多日志文件并在本地读取

时间:2017-04-29 05:27:31

标签: python amazon-web-services amazon-s3

我每10分钟就会在Amazon S3中存储一个日志文件。我试图访问这些日志文件的数周和数月,并将其读入python。

我已经使用boto打开并读取每个键并将所有日志附加在一起,但它太慢了。我正在寻找替代解决方案。你有什么建议吗?

2 个答案:

答案 0 :(得分:1)

Amazon S3上没有任何功能可以合并或操作文件。

我建议使用AWS Command-Line Interface (CLI)使用aws s3 sync命令将文件同步到本地目录。这可以并行复制文件,并支持大文件的多部分传输。

定期运行该命令可以关闭文件的副本,然后您的应用可以快速合并文件。

如果您从Amazon EC2实例执行此操作,则无需收取数据传输费用。如果您通过互联网下载到计算机,则需要收取数据传输费用。

答案 1 :(得分:1)

您的第一个问题是您的天真解决方案可能只使用一个连接,并且没有充分利用您的网络带宽。您可以尝试使用自己的多线程支持,但尝试使用现有客户端(s4cmd,aws-cli,s3gof3r)可能更好

一旦您充分利用了带宽,就可以使用一些其他技巧来提高您的传输速度。

这个SumoLogic article的提示1对前两个优化领域有一些很好的信息。

另请注意you'll need to modify your key layout if you hope to consistently get above 100 requests per second

鉴于这个日志文件只有一年的价值只有~50k对象,快速ec2实例上的多连接客户端应该是可行的。但是,如果没有削减它,下一步就是使用EMR。例如,您可以使用S3DistCP将日志块连接成更大的对象,这些对象应该更快下拉。 (或者参见this AWS Big Data blog post了解一些疯狂的过度工程)或者,您可以使用类似mrjob的内容在EMR中进行日志处理。

最后,还有亚马逊的新Athena产品,可让您查询存储在S3中的数据,并可能适合您的需求。