【问题标题】:Zarr: improve xarray writing performance to S3Zarr:将 xarray 写入性能提高到 S3
【发布时间】:2021-06-09 07:23:38
【问题描述】:

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 秒

所以我的问题是:

  1. 有没有办法将该区域传递给fsspec(或s3fs)?我尝试将s3_additional_kwargs={"region":"eu-central-1"} 添加到get_mapper 方法中,但没有任何作用。

  2. 有没有比上述方法(fsspec)更好的方式在 S3 上通过 xarray 与 zarr 交互?


版本:

xarray: 0.17.0
zarr: 2.6.1
fsspec: 0.8.4

【问题讨论】:

  • 你可以看看github.com/pydata/xarray/issues/2300#issuecomment-805883595 "zarr and xarray chunking compatible and to_zarr performance"
  • @Josh 谢谢,但我不认为这是一个块问题
  • @Val 根据s3fs documentation,他们将region_name 显示为kwargs,以及有关使用region 的fsspec 问题。然而 zarr 在庞大的数据集上广受欢迎。不幸的是,我没有当前的工具来验证上述链接
  • @NagarajTantri 设置 client_kwargs={'region_name':'eu-central-1'} 可以解决问题并回答第 1 点。如果您愿意,请发布我可以接受的答案。谢谢!
  • 完成,@Val。一定要检查一下。

标签: python python-xarray zarr python-s3fs


【解决方案1】:

在检查他们的文档时,对于s3fs documentation,他们将region_name 显示为kwargs,以及有关使用region 的fsspec 问题

所以你可以在get_mapper 中使用类似client_kwargs={'region_name':'eu-central-1'} 的东西,比如:

fsspec.get_mapper("s3://bucket/target.zarr", 
                  client_kwargs={'region_name':'eu-central-1'})

此外,zarr 因其庞大的数据集而广受欢迎。

【讨论】:

    猜你喜欢
    • 2020-04-03
    • 2014-01-13
    • 1970-01-01
    • 2019-05-08
    • 1970-01-01
    • 2013-12-03
    • 2014-05-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多