确定分布式D3中的瓶颈

时间:2018-10-08 18:39:04

标签: amazon-s3 dask-distributed

我希望了解dask分布式如何从命令行处理任务的分布。

我有以下结构:

  1. 在主代码中(是否有一个更好的术语?不在dask分布式中运行的代码)s3fs用于列出存储桶的内容
  2. 该列表被映射到一个“ main”函数,该函数将CSV数据转换为JSON,并在此过程中进行了一些质量检查
  3. 已转换的数据通过过滤运行 功能只提取我想要的数据
  4. 已过滤的数据返回到main,然后使用s3fs写回到S3

实际上,我提供给client.map函数的是一个字符串列表,这些字符串是s3资源的指针。每个工作人员都负责连接到s3并运行所有代码以获取文件内容,转换记录,对其进行过滤并写回s3。

当s3中有1800个文件时,需要花费几分钟的时间来分发和完成所有操作-这是。当我有18,000条记录时,我无法将任务成功分发给工作人员,而无法使用B=client.map(main, filelist)之类的命令来运行它们-该命令似乎就在那儿。如果我取消尝试映射的过程,则会得到一些提示,表明它正在腌制一堆东西,但我不知道在30-60分钟内需要腌制什么。

奇怪的是,当我有18,000条记录时,即使我尝试仅分发10条记录,例如使用以下命令B=client.map(main, filelist[:10]),我也会遇到相同的超时时间。

主要问题:

  1. 在单个map调用中具有多个函数的模型是否正确?也就是说,我映射了main函数,该函数读取S3对象,然后调用注解,然后进行过滤,然后再写回S3?
  2. 或者,我应该将每个函数移到它自己的分布式调用中,从每个函数中获取期货对象吗?
  3. 是否有理由将18,000个字符串分配给一个分布式工作者会花费这么长时间?
  4. S3存储桶大小似乎对性能有影响吗?

0 个答案:

没有答案