Zarr:提高 S3 的 xarray 写入性能
Zarr: improve xarray writing performance to S3
将 xarray
数据集写入 AWS S3 需要大量时间,即使实际上没有使用 compute=False
.
写入数据也是如此
这是一个例子:
import fsspec
import xarray as xr
x = xr.tutorial.open_dataset("rasm")
target = fsspec.get_mapper("s3://bucket/target.zarr")
task = x.to_zarr(target, compute=False)
即使没有实际计算,to_zarr
从与 S3 存储桶位于同一区域的 EC2 中也需要 大约 6 秒。
查看调试日志,似乎有相当多的重定向正在进行,因为 aiobotocore
中的默认区域设置为 us-east-2
而存储桶位于 eu-central-1
.
如果我先手动将默认区域放入环境变量中
os.environ['AWS_DEFAULT_REGION'] = 'eu-central-1'
然后所需时间下降到大约 3.5 秒。
所以我的问题是:
有什么方法可以将区域传递给fsspec
(或s3fs
)?我试过将 s3_additional_kwargs={"region":"eu-central-1"}
添加到 get_mapper
方法中,但那没有做任何事情。
从 xarray
开始与 S3 上的 zarr 交互是否有比上述方法(使用 fsspec
)更好的方法?
版本:
xarray: 0.17.0
zarr: 2.6.1
fsspec: 0.8.4
在检查他们的文档时,s3fs documentation they show region_name
as a kwargs
and also the fsspec issue regarding using the region
因此您可以在 get_mapper
中使用类似 client_kwargs={'region_name':'eu-central-1'}
的内容,例如:
fsspec.get_mapper("s3://bucket/target.zarr",
client_kwargs={'region_name':'eu-central-1'})
此外,zarr
因庞大的数据集而广受欢迎。
将 xarray
数据集写入 AWS S3 需要大量时间,即使实际上没有使用 compute=False
.
这是一个例子:
import fsspec
import xarray as xr
x = xr.tutorial.open_dataset("rasm")
target = fsspec.get_mapper("s3://bucket/target.zarr")
task = x.to_zarr(target, compute=False)
即使没有实际计算,to_zarr
从与 S3 存储桶位于同一区域的 EC2 中也需要 大约 6 秒。
查看调试日志,似乎有相当多的重定向正在进行,因为 aiobotocore
中的默认区域设置为 us-east-2
而存储桶位于 eu-central-1
.
如果我先手动将默认区域放入环境变量中
os.environ['AWS_DEFAULT_REGION'] = 'eu-central-1'
然后所需时间下降到大约 3.5 秒。
所以我的问题是:
有什么方法可以将区域传递给
fsspec
(或s3fs
)?我试过将s3_additional_kwargs={"region":"eu-central-1"}
添加到get_mapper
方法中,但那没有做任何事情。从
xarray
开始与 S3 上的 zarr 交互是否有比上述方法(使用fsspec
)更好的方法?
版本:
xarray: 0.17.0
zarr: 2.6.1
fsspec: 0.8.4
在检查他们的文档时,s3fs documentation they show region_name
as a kwargs
and also the fsspec issue regarding using the region
因此您可以在 get_mapper
中使用类似 client_kwargs={'region_name':'eu-central-1'}
的内容,例如:
fsspec.get_mapper("s3://bucket/target.zarr",
client_kwargs={'region_name':'eu-central-1'})
此外,zarr
因庞大的数据集而广受欢迎。