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

时间:2018-12-30 02:07:54

标签: python amazon-web-services amazon-s3 dask dask-distributed

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的方法,而不是在本地代码上进行设置,但是我不知道该怎么做。

这是堆栈跟踪的一部分:

  

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

1 个答案:

答案 0 :(得分:0)

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

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

最后,请注意,s3fs和dask都允许在连接错误或常规任务错误时重试。如果您只是为偶尔的懒散准备而准备了这笔钱,这可能足以为您提供帮助。