繁体   English   中英

大文件使Amazon s3上的read_csv超时超时

[英]dask read_csv timeout on Amazon s3 with big files

s3上大文件的dask read_csv超时

s3fs.S3FileSystem.read_timeout = 5184000  # one day
s3fs.S3FileSystem.connect_timeout = 5184000  # one day

client = Client('a_remote_scheduler_ip_here:8786')

df = dd.read_csv('s3://dask-data/nyc-taxi/2015/*.csv')
len(df)

len(df)具有超时异常,如果文件很小,则效果很好。

我认为我们需要一种在远程工作者上而不是本地代码上设置s3fs.S3FileSystem.read_timeout的方法,但是我不知道该怎么做。

这是堆栈跟踪的一部分:

read_block中的文件“ /opt/conda/lib/python3.6/site-packages/dask/bytes/utils.py”,第238行,文件“ /opt/conda/lib/python3.6/site-packages/s3fs/读取文件“ /opt/conda/lib/python3.6/site-packages/s3fs/core.py”第1303行的_fetch文件“ / opt / conda / lib / python3”中的core.py”行1333。 6 / site-packages / s3fs / core.py”,第1520行,在_fetch_range文件中,“ / opt / conda / lib / python3.6 / site-packages / botocore / response.py”,第81行,已读取botocore.exceptions .ReadTimeoutError:在端点URL上读取超时:“无”

使用class属性设置超时似乎是一件合理的事,但是您正在使用客户端与其他进程/机器中的工作人员进行对话。 因此,您需要在每个工作程序的类副本上设置属性,以使方法生效。

更好的做法可能是将read_csv使用的块大小(默认为64MB)设置为较小的数字。 我认为您的网络速度较慢,这就是为什么您超时的原因。 如果您需要小于5MB的数字(即s3fs中的默认预读大小),则还应该在传递给read_csvstorage_options传递default_block_size

最后请注意,s3fs和dask都允许重试连接错误或常规任务错误。 如果您只是偶尔准备一下就准备好了,这可能就足以为您提供帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM