【问题标题】:How can I download multiple objects from S3 simultaneously?如何同时从 S3 下载多个对象?
【发布时间】:2015-07-18 10:36:45
【问题描述】:

我在 s3 中有很多(数百万)小日志文件,其名称(日期/时间)有助于定义它,即 servername-yyyy-mm-dd-HH-MM。例如

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。

【问题讨论】:

  • 我不知道 S3,但请告诉我如何在 S3 中生成所有文件的列表,以及如何复制其中一个,我会尽力向您展示一种方法做的真快...
  • 要进行行绑定,您可以简单地将所有 CSV 组合在一起(剥离标题)并将其作为单个 CSV 读取吗?如果是这样,最好在复制每个文件后执行此操作。

标签: r amazon-web-services amazon-ec2 amazon-s3 aws-cli


【解决方案1】:

由于您没有回答我的问题,也没有说明您使用的是什么操作系统,因此很难提出任何具体建议,因此我将简要建议您使用 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 更改为任何其他数量。目前,它只是 echoes 它将运行的命令,但是当您看到它的工作原理时,您可以删除单词 echo

有一个很好的教程here,Ole Tange(GNU Parallel 的作者)也在 SO 上,所以我们相处得很好。

【讨论】:

  • 猫 GrabMe.txt |并行 -jk 32 'aws s3 cp {} .; grep -v \" {}' > big.csv
  • 基于上面那个例子是什么原因启动 32 个进程/线程来上传 4 个文件?
  • 这只是一个例子 - 我以为你有数百/数千/数百万个文件或更多。
  • 运行上面显示的此命令会导致将文件内容打印到控制台,但不会下载任何内容。有什么想法吗?
  • @ErikR 实际上,它只是回显/打印由于echo 语句而运行的命令。如果输出看起来正确,请在不使用 echo 的情况下再次运行它。
猜你喜欢
  • 2015-12-24
  • 2018-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-12
  • 1970-01-01
  • 2012-06-17
相关资源
最近更新 更多