我在s3中有很多(数百万)个小日志文件,其名称(日期/时间)有助于定义它,即servername-yyyy-mm-dd-HH-MM。 e.g。
s3://my_bucket/uk4039-2015-05-07-18-15.csv
s3://my_bucket/uk4039-2015-05-07-18-16.csv
s3://my_bucket/uk4039-2015-05-07-18-17.csv
s3://my_bucket/uk4039-2015-05-07-18-18.csv
...
s3://my_bucket/uk4339-2015-05-07-19-23.csv
s3://my_bucket/uk4339-2015-05-07-19-24.csv
...
etc
从EC2开始,使用AWS CLI,我想同时下载2015年所有分钟等于16的文件,仅限所有服务器uk4339和uk4338
有一种聪明的方法吗?
此外,如果这是s3中查询数据的可怕文件结构,我将非常感谢有关如何更好地设置它的任何建议。
我可以将相关的aws s3 cp ...
命令放入shell / bash脚本的循环中,以便顺序下载相关文件,但是,想知道是否有更高效的内容。
作为一个额外的奖励,我想将结果排在一起作为一个csv。
可以使用此R代码行在R中生成模拟csv文件的快速示例
R> write.csv(data.frame(cbind(a1=rnorm(100),b1=rnorm(100),c1=rnorm(100))),file='uk4339-2015-05-07-19-24.csv',row.names=FALSE)
创建的csv是uk4339-2015-05-07-19-24.csv
。仅供参考,我将在最后将合并后的数据导入R.
答案 0 :(得分:4)
由于您没有回答我的问题,也没有说明您使用的操作系统,因此提出任何具体建议有点困难,因此我将简要建议您使用GNU Parallel来并行化您的S3获取请求以绕过等待时间。
假设您以某种方式生成所需的所有S3文件的列表,并将结果列表放在名为GrabMe.txt
的文件中,如下所示
s3://my_bucket/uk4039-2015-05-07-18-15.csv
s3://my_bucket/uk4039-2015-05-07-18-16.csv
s3://my_bucket/uk4039-2015-05-07-18-17.csv
s3://my_bucket/uk4039-2015-05-07-18-18.csv
然后你可以并行获得它们,一次说32个,就像这样:
parallel -j 32 echo aws s3 cp {} . < GrabMe.txt
或者如果您更喜欢从左到右阅读
cat GrabMe.txt | parallel -j 32 echo aws s3 cp {} .
显然,您可以将并行请求的数量从32更改为任何其他数字。目前,它只是echo
它将运行的命令,但是当您看到它是如何工作时,您可以删除单词echo
。
有一个很好的教程here,而Ole Tange(GNU Parallel的作者)也是如此,所以我们的团队很好。