我必须将400G的文件从弹性块存储卷复制到s3桶中...这些大约是30万个文件,大约1Mb
我试过s3cmd和s3fuse,两个都是真的,真的很慢..对一个完整的一天s3cmd然表示,完成复制,而当我检查了水桶,若无其事(我想,出事了,但至少s3cmd从未抱怨过任何东西)
S3Fuse工作了整整一天,并复制了不到10%的文件...
有更好的解决方案吗?
我当然正在运行Linux(ubuntu 12.04)
我必须将400G的文件从弹性块存储卷复制到s3桶中...这些大约是30万个文件,大约1Mb
我试过s3cmd和s3fuse,两个都是真的,真的很慢..对一个完整的一天s3cmd然表示,完成复制,而当我检查了水桶,若无其事(我想,出事了,但至少s3cmd从未抱怨过任何东西)
S3Fuse工作了整整一天,并复制了不到10%的文件...
有更好的解决方案吗?
我当然正在运行Linux(ubuntu 12.04)
Answers:
有几个关键因素决定了从EC2到S3的吞吐量:
在传输大量数据的情况下,使用集群计算实例可能在经济上可行,因为吞吐量的有效收益(> 10x)大于成本差异(2-3x)。
尽管上面的想法很合乎逻辑(尽管可能没有每个线程的上限),但是找到支持它们的基准相当容易。一个特别详细的可以在这里找到。
使用64到128个1MB对象的并行(同时)上传,应使m1.xlarge具有的1Gbps上行链路饱和,甚至应使集群计算实例(cc1.4xlarge)的10Gbps上行链路饱和。
尽管更改实例大小相当容易,但其他两个因素可能更难管理。
按照http://docs.aws.amazon.com/cli/latest/topic/s3-config.html调整AWS CLI S3配置值。
以下内容使S3同步速度提高了至少8倍!
例:
$ more ~/.aws/config
[default]
aws_access_key_id=foo
aws_secret_access_key=bar
s3 =
max_concurrent_requests = 100
max_queue_size = 30000
我用C#(CopyFasterToS3)编写了一个优化的控制台应用程序来做到这一点。我在EBS vol中使用过,我的情况是它有5个文件夹,其中包含200万个文件,超过20百万个文件。该脚本在不到30分钟的时间内执行。
在本文中,我展示了如何与并行函数一起使用递归函数。您可以将其转录成另一种语言。
祝好运!
尝试使用s4cmd,它确实比s3cmd更快。其地址:https://github.com/bloomreach/s4cmd
尝试使用s3-cli而不是s3cmd。我使用它而不是s3cmd将文件上传到s3存储桶,这使我的部署速度提高了将近17分钟(从21分钟到4分钟)!