dre*_*ker 23 amazon-s3 amazon-web-services
我想直接抓取互联网文件并将其粘贴到S3存储桶中,然后将其复制到PIG集群.由于文件的大小和我不太好的互联网连接,首先将文件下载到我的电脑上,然后将其上传到亚马逊可能不是一个选择.
有什么方法可以抓住互联网文件并将其直接插入S3吗?
mpa*_*vey 11
对于经验不足的人(比如我),这里是通过EC2更详细的过程描述:
在与目标S3存储桶相同的区域中启动Amazon EC2实例.最小的可用(默认的亚马逊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实例.
通过下载数据curl并将内容直接传输到S3。数据直接流传输到S3,而不是本地存储,从而避免了任何内存问题。
curl "https://download-link-address/" | aws s3 cp - s3://aws-bucket/data-file
Run Code Online (Sandbox Code Playgroud)
如上所述,如果本地计算机上的下载速度太慢,请在其中启动EC2实例ssh并在其中执行上述命令。
[2017年编辑]我在2013年给出了原始答案.今天我建议使用AWS Lambda下载文件并将其放在S3上.这是理想的效果 - 在没有服务器的情况下将对象放在S3上.
[原始答案]不可能直接进行.
为什么不用EC2实例而不是本地PC呢?在同一地区从EC2到S3的上传速度非常好.
关于从/到s3的流读/写我使用python的smart_open
您可以使用 Python 将文件从 Internet 流式传输到 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>'})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9754 次 |
| 最近记录: |