将网络上的大型数据集直接下载到AWS S3


12

有谁知道是否可以从URL将大型数据集导入Amazon S3?

基本上,我想避免下载大文件,然后通过Web门户将其重新上传到S3。我只想将下载URL提供给S3,然后等待他们将其下载到他们的文件系统中。这似乎很容易做到,但是我只是找不到有关它的文档。


好问题。
Pramit

Answers:


10

由于您显然拥有一个AWS账户,因此我建议您执行以下操作:

  • 创建一个EC2实例(任何大小)
  • 使用wget(或curl)将文件提取到该EC2实例。例如:wget http://example.com/my_large_file.csv
  • 安装s3cmd
  • 使用s3cmd将文件上传到S3。例如:s3cmd cp my_large_file.csv s3://my.bucket/my_large_file.csv

由于各种AWS服务之间建立的连接利用了AWS的内部网络,因此从EC2实例上传到S3的速度非常快。比从您自己的计算机上载要快得多。通过这种方式,您可以避免将文件下载到计算机上,并节省了潜在的大量时间通过Web界面上载文件。


谢谢。我当时正在考虑这样的事情,但我想问一下周围是否有更简单的方法。也感谢您指出所有步骤。非常有帮助
Will Stedden

@Daniel Zohar如果URL是动态的,该怎么办?使用wget不会下载文件,而只会下载具有以下链接的页面: cms.unov.org/UNCorpus/en/Download?file=UNv1.0.en
zh.tar.gz.00

3
  1. 启动具有足够存储空间的EC2实例

  2. SSH到实例

  3. 获取与从本地计算机下载的内容相对应的curl命令。您可以使用Google chrome中的开发者选项->网络标签->复制->复制为curl(对于某些需要身份验证的网站(例如kaggle),此步骤是必需的)

  4. 在实例终端上,运行curl命令(追加-o output_file到命令)。这将下载并保存文件

  5. 配置aws configAWS 凭证以将实例连接到s3(一种方法是使用命令,提供AWS访问密钥ID和Secret),

  6. 使用以下命令将文件上传到s3:

    aws s3 cp path-to-file s3://bucket-name/
    

2

请参阅Aws文档:http ://aws.amazon.com/code ,其中提供了适用于大多数编程语言的库。因此,您可以创建存储桶并在代码中进行配置,以从url中获取数据并在s3中写入此存储桶

例如在python中:

from boto.s3.key import Key
k = Key(bucket)
k.key = 'foobar'
k.set_contents_from_string(url_data)

参考:https : //boto.readthedocs.org/en/latest/s3_tut.html


我认为这是不对的。我不清楚url_data的来源。从文档中看,k.set_contents_from_string()似乎确实将文件'foobar'的内容设置为该字符串中包含的任何内容。我希望将该URL上的内容直接推送到s3,而无需在本地下载。
Will Stedden 2015年

1

您可以将s3存储桶安装到ec2实例,然后将cd安装到/ path / to / s3_mount_on_a_folder,在那里您可以简单地使用以下命令:

wget https://your.download.url/

要将s3安装到ec2上,请使用s3fs。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.