我有一个处理大数据集并从S3存储桶下载数据的系统。
每个实例从S3上的对象(dir)内部下载多个对象。当实例数较少时,下载速度很好即 4-8MiB/s
。
但是当我使用类似100-300
个实例时,下载速度会降低到80KiB/s
。
想知道背后的原因是什么,我可以用什么方法来解决它?
答案 0 :(得分:6)
如果您的EC2实例位于私有子网中,那么您的NAT可能是一个限制因素。
尝试以下方法:
答案 1 :(得分:3)
S3存储桶中的对象如何命名?由于分区,对象的命名可能对桶的吞吐量产生惊人的大影响。在后台,S3根据对象的键对存储桶进行分区,但只有键的前3-4个字符才是真正重要的。另请注意,密钥是存储桶中的整个路径,但子路径对于分区并不重要。因此,如果您有一个名为mybucket
的存储桶,并且您的内部对象有2017/july/22.log
,2017/july/23.log
,2017/june/1.log
,2017/oct/23.log
,那么您就可以了按月分区并不重要,因为只使用整个键的前几个字符。
如果您的存储桶中的对象具有顺序命名结构,那么对于对象的许多并行请求,您可能会遇到性能不佳的问题。为了解决这个问题,您应该为存储桶中的每个对象分配3-4个字符的随机前缀。
有关详细信息,请参阅http://docs.aws.amazon.com/AmazonS3/latest/dev/request-rate-perf-considerations.html。
答案 2 :(得分:0)
您可能希望使用S3DistCP而不是手动管理并发和连接...