【问题标题】:dask s3 access on ec2 workers对 ec2 工作人员的 dask s3 访问
【发布时间】:2017-03-03 19:38:26
【问题描述】:

我尝试从 s3 读取大量 csv 文件,工作人员在具有正确 IAM 角色的 ec2 实例上运行(我可以从其他脚本的相同存储桶中读取)。 当我尝试使用此命令从私有存储桶中读取自己的数据时:

client = Client('scheduler-on-ec2')
df = read_csv('s3://xyz/*csv.gz',
              compression='gzip',
              blocksize=None,
              #storage_options={'key': '', 'secret': ''}
             )
df.size.compute()

数据看起来像是在本地读取(由本地 Python 解释器,而不是工作人员),然后由本地解释器发送给工作人员(或调度程序?),当工作人员收到块时,他们运行计算并返回结果。通过storage_options 传递或不传递密钥和秘密都相同。

当我使用storage_options={'anon': True} 从公共 s3 存储桶(纽约出租车数据)中读取数据时,一切正常。

您认为问题是什么,我应该重新配置更改以使工作人员直接从 s3 读取?

s3fs 安装正确,根据 dask 支持的文件系统如下:

>>>> dask.bytes.core._filesystems
{'file': dask.bytes.local.LocalFileSystem,
 's3': dask.bytes.s3.DaskS3FileSystem}

更新

在监控网络接口后,似乎有些东西从解释器上传到了调度器。数据帧(或包)中的分区越多,发送到调度程序的数据就越大。我以为它可能是计算图,但它确实很大。对于 12 个文件,它是 2-3MB,对于 30 个文件,它是 20MB,对于更大的数据,(150 个文件)将它发送到调度程序需要太长时间,我没有等待它。还有什么被发送到可以占用这么多数据的调度程序?

【问题讨论】:

  • > 还有什么发送到调度程序可以占用这么多数据?我所知道的。没有什么。如果您可以生成可重现的minimal failing example,我建议您在 Github 上提交一些内容。当我尝试这个问题时,一切都运行良好。你可以试试inspecting the dask graph manually

标签: python amazon-s3 dask


【解决方案1】:

当您调用dd.read_csv('s3://...') 时,本地机器将读取少量数据以猜测列名、dtypes 等。但是工作人员将直接读取大部分数据。

当使用分布式调度器时,Dask 不会在本地机器中加载数据,然后将其泵出给工作人员。正如您所建议的那样,这将是低效的。

您可能需要查看web diagnostic pages 以获取有关需要时间的更多信息。

【讨论】:

  • 是的,我正在检查网络诊断页面。当我少量 csvs 并监视我的网络接口时,我看到我的机器正在向 ec2 上传一段时间,当它完成时,任务开始按预期在工作人员上运行,显示在诊断页面上。在更多 csv 上运行时,上传根本没有完成。我不确定发生了什么,只是猜测所有数据都在上传,但我不知道幕后发生了什么。
猜你喜欢
  • 1970-01-01
  • 2021-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-19
  • 2020-10-11
相关资源
最近更新 更多