List 我想知道AWS EMR发送大量S3模型文件的列表和head请求是否正常

List 我想知道AWS EMR发送大量S3模型文件的列表和head请求是否正常,list,amazon-s3,python-requests,amazon-emr,head,List,Amazon S3,Python Requests,Amazon Emr,Head,我正在使用AWS EMR群集服务。 在这种情况下,机器学习任务(如spark build)是通过在EMR集群使用之间引用带有S3 Bucket的模型文件来执行的。 我从S3请求了大量的列表请求,但我想知道AWS EMR向S3模型文件发送大量列表请求是否正常。 症状:AWS EMR每天向S3发送270万个头和列表请求。发送了大量的头和列表请求 这与hadoop/spark/hive S3客户端上如何模拟目录有关;每次进度查看路径上是否有目录时,它都会发出一个列表请求,可能会先发出一个HEAD请求(

我正在使用AWS EMR群集服务。 在这种情况下,机器学习任务(如spark build)是通过在EMR集群使用之间引用带有S3 Bucket的模型文件来执行的。 我从S3请求了大量的列表请求,但我想知道AWS EMR向S3模型文件发送大量列表请求是否正常。
症状:AWS EMR每天向S3发送270万个头和列表请求。

发送了大量的头和列表请求

这与hadoop/spark/hive S3客户端上如何模拟目录有关;每次进度查看路径上是否有目录时,它都会发出一个列表请求,可能会先发出一个HEAD请求(查看是否是文件)

然后是内容列表、更多列表请求,最后是读取文件。每次open()调用都会有一个HEAD请求来验证文件是否存在并确定文件的长度

使用GET请求读取文件。每次在输入流上读取seek()/buffer并且数据不在缓冲区中时,客户机都必须执行以下操作之一

  • 读取到当前远程获取的末尾(假设是远程获取),丢弃数据,发出新的远程获取
  • 中止()HTTPS连接,协商新连接。慢点
总的来说,会有很多IO,特别是当应用程序在缓存目录列表的输出、文件是否存在、操作前做不必要的检查(
if fs.exists(path)fs.delete(path,false)
)等方面效率低下时。 如果这是您的代码,请尽量不要这样做


(免责声明:这都是根据调整开源hive/spark应用程序以通过S3A连接器工作的经验进行的猜测。我假设EMR也是如此)

当hadoop/spark/hive s3客户端中模拟目录时,您会发出这么多列表和标题请求吗?是否有一个结构性问题似乎比我预期的要多得多,或者是需要再次查看工作源代码中的细节?查看OSS代码的所有细节。但是,这取决于应用程序如何使用/滥用API。这是你自己的代码吗?其他人?