我希望能够直接从互联网上获取文件并将其放入S3存储桶中,然后将其复制到PIG集群中。由于文件的大小和我不太好的网络连接,先下载文件到我的电脑上,然后再上传到Amazon可能不是一个选择。
是否有任何方法可以通过抓取互联网上的文件并直接将其放入S3中?
是否有任何方法可以通过抓取互联网上的文件并直接将其放入S3中?
通过curl
下载数据并将内容直接传输到S3。数据会直接流式传输到S3而不会在本地存储,避免任何内存问题。
curl "https://download-link-address/" | aws s3 cp - s3://aws-bucket/data-file
如上所建议,如果您的本地计算机下载速度过慢,请启动一个 EC2 实例,在其中运行ssh
命令并执行上述命令。
curl -s "url" |cat| aws s3 cp - "s3://..."
- Uri Goren对于像我这样的不太有经验的人,以下是通过EC2的更详细的过程描述:
在与目标S3存储桶相同的区域内启动Amazon EC2实例。最小可用(默认Amazon Linux)实例即可,但请确保为其提供足够的存储空间来保存您的文件。如果你需要超过~20MB/s的传输速度,则需要考虑选择具有更大管道的实例。
启动到新EC2实例的SSH连接,然后下载文件,例如使用wget
。(例如,要通过FTP下载整个目录,可以使用wget -r ftp://name:passwd@ftp.com/somedir/
。)
使用AWS CLI(请参阅Amazon文档),将文件上传到您的S3存储桶。例如,aws s3 cp myfolder s3://mybucket/myfolder --recursive
(对于整个目录)。 (在此命令起作用之前,您需要向配置文件中添加您的S3安全凭据,如Amazon文档中所述。)
终止/销毁您的EC2实例。
你可以使用Python将文件从互联网流式传输到AWS S3。
s3=boto3.resource('s3')
http=urllib3.PoolManager()
urllib.request.urlopen('<Internet_URL>') #Provide URL
s3.meta.client.upload_fileobj(http.request('GET', 'Internet_URL>', preload_content=False), s3Bucket, key,
ExtraArgs={'ServerSideEncryption':'aws:kms','SSEKMSKeyId':'<alias_name>'})