我有一个处理大数据集并从S3桶下载数据的系统。
每个实例在S3上从对象(dir)内部下载多个对象。当实例数较少时,下载速度是好的,即4-8MiB/s。但是,当我像100-300实例一样使用时,下载速度会降低到80KiB/s。
想知道这背后的原因是什么,我能用什么方法来补救呢?
发布于 2017-10-24 19:41:26
您的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。
发布于 2017-10-24 19:51:03
如果您的EC2实例位于专用子网中,那么NAT可能是一个限制因素。
尝试以下几点:
发布于 2017-10-24 20:59:32
您可能希望使用S3DistCP而不是手工管理并发和连接.
https://stackoverflow.com/questions/46918061
复制相似问题