常见问题

更多问题可以在 StackOverflow 上找到:http://stackoverflow.com/search?tab=votes&q=dask%20distributed

如何使用外部模块?

使用 client.upload_file。更多详细信息,请参阅API 文档 和 StackOverflow 上的一个问题 “我可以在 Dask/Distributed 中使用从 .py 文件导入的函数吗?” 此函数支持单独文件和 setuptools 的 .egg 文件,适用于较大模块。

打开的文件描述符过多?

您的操作系统对任何用户可以同时拥有的打开文件或网络连接数量设置了限制。根据您的集群规模,dask scheduler 可能会达到此限制。

默认情况下,大多数 Linux 发行版将此限制设置为 1024 个打开文件/连接,而 OS-X 设置为 128 或 256。每个工作节点会给正在运行的调度器增加几个打开连接(介于一到十个之间,取决于竞争程度)。

如果您在托管集群上,通常可以要求集群管理员增加此限制。如果您具有 root 权限并且知道自己在做什么,可以通过编辑 /etc/security/limits.conf 文件来更改 Linux 上的限制。说明在此链接的标题 “User Level FD Limits” 下:http://www.cyberciti.biz/faq/linux-increase-the-maximum-number-of-open-files/

运行 dask worker 时关于 OMP_NUM_THREADS 的错误

有关 OMP_NUM_THREADS 的更多问题,请参阅 http://stackoverflow.com/questions/39422092/error-with-omp-num-threads-when-using-dask-distributed

Dask 是否处理数据本地性?

是的,包括内存中的数据本地性和磁盘上的数据本地性。

通常将计算移动到数据所在的位置要便宜得多。如果您的一个任务创建了一个大型数组,而未来的任务计算该数组的总和,您会希望确保总和计算在该数组最初所在的同一个工作节点上运行,否则随着数据在工作节点之间移动,您将等待很长时间。如果我们粗心大意,不必要的通信很容易占据主要成本。

Dask 调度器跟踪每个工作节点生成的每个中间值的位置和大小,并在将未来任务分配给工作节点时使用此信息。Dask 试图通过最小化数据移动来提高计算效率。

有时您的数据位于硬盘或其他不受 Dask 控制的远程存储上。在这种情况下,调度器不知道您的数据具体在哪里,因此您必须做更多的工作。您可以告诉 Dask 优先在特定的一个或一组工作节点上运行任务。

例如,Dask 开发者在与 Hadoop 文件系统等数据本地存储系统通信时,利用此能力来构建数据本地性。当用户使用 dask.dataframe.read_csv('hdfs:///path/to/files.*.csv') 等高级函数时,Dask 会与 HDFS NameNode 通信,找到所有数据块的位置,并将该信息发送给调度器,以便它可以做出更明智的决策并缩短用户的加载时间。

PermissionError [Errno 13] 权限被拒绝: `/root/.dask`

当通过标准进程控制工具 supervisor 启动分布式系统并以非 root 用户身份运行时,可能会看到此错误。这是由于 supervisor 未将 shell 环境变量传递给子进程所致,请查阅 supervisor 文档的此部分 以了解如何传递 $HOME$USER 变量。

KilledWorker, CommsClosed 等

如果工作节点意外地从您的集群中消失,您可能会看到一系列错误消息。检查受影响的工作节点日志后,您应该阅读为什么我的工作节点崩溃了? 部分。