常见问题
内容
常见问题¶
更多问题可以在 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。每个工作进程都会向正在运行的调度程序添加一些打开的连接(数量在1到10之间,具体取决于竞争的激烈程度。)
如果你在一个托管集群上,你通常可以请求管理你集群的人来增加这个限制。如果你有root权限并且知道你在做什么,你可以通过编辑 /etc/security/limits.conf 来改变Linux上的限制。说明在这里的“用户级FD限制”标题下: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 名称节点通信,找到所有数据块的位置,并将这些信息发送给调度器,以便它能做出更智能的决策并提高用户的加载时间。
PermissionError [Errno 13] 权限被拒绝: `/root/.dask`¶
当通过标准进程控制工具 supervisor 启动分布式进程并以非root用户运行时,可能会看到此错误。这是由于 supervisor 没有将shell环境变量传递给子进程,请前往 这一节 的supervisor文档查看如何传递 $HOME 和 $USER 变量。
KilledWorker, CommsClosed 等。¶
如果你的集群中的工作节点意外消失,你可能会看到一系列错误信息。在检查受影响的工作节点的日志后,你应该阅读 为什么我的工作进程会死亡? 部分。