Dask.distributed
目录
Dask.distributed¶
Dask.distributed 是一个用于 Python 分布式计算的轻量级库。它扩展了 concurrent.futures
和 dask
API,以支持中等规模的集群。
请参阅快速入门以开始使用。
动机¶
Distributed
旨在补充现有的 PyData 分析堆栈。特别是,它满足了以下需求:
低延迟: 每个任务的开销约为 1 毫秒。一个小的计算和网络往返可以在不到 10 毫秒内完成。
点对点数据共享: 工作节点之间相互通信以共享数据。这消除了数据传输的中心瓶颈。
复杂调度: 支持复杂的工作流(不仅仅是 map/filter/reduce),这对于 nd-arrays、机器学习、图像处理和统计中使用的复杂算法是必需的。
纯 Python: 使用成熟的技术在 Python 中构建。这简化了安装,提高了效率(对于 Python 用户),并简化了调试。
数据本地性: 调度算法巧妙地在数据所在的位置执行计算。这最大限度地减少了网络流量并提高了效率。
熟悉的 API: 与 Python 标准库中的 concurrent.futures API 兼容。与用于并行算法的 dask API 兼容。
易于设置: 作为一个纯 Python 包,distributed 可以通过
pip
安装,并且易于在您自己的集群上设置。
架构¶
Dask.distributed 是一个集中管理、分布式、动态的任务调度器。中央的 dask scheduler
进程协调分布在多台机器上的多个 dask worker
进程的动作以及多个客户端的并发请求。
调度器是异步且事件驱动的,同时响应来自多个客户端的计算请求并跟踪多个工作节点的进度。事件驱动和异步的特性使其能够灵活地同时处理来自多个用户的各种工作负载,同时还能处理存在故障和新增的流动工作节点群体。工作节点之间通过 TCP 进行批量数据传输。
在内部,调度器将所有工作跟踪为一个不断变化的、由任务组成的有向无环图。任务是一个操作 Python 对象的 Python 函数,它可以是其他任务的结果。这个任务图随着用户提交更多计算而增长,随着工作节点完成任务而填充,并随着用户离开或对先前结果失去兴趣而缩小。
用户通过将本地 Python 会话连接到调度器并提交工作来进行交互,提交方式可以是单独调用简单接口 client.submit(function, *args, **kwargs)
,也可以是使用父库 dask
的大型数据集合和并行算法。 dask 库中的集合,如 dask.array 和 dask.dataframe,提供了对复杂算法和 NumPy 和 Pandas 等熟悉 API 的便捷访问,而简单的 client.submit
接口则在用户想要跳出预设的“大数据”抽象并提交完全自定义的工作负载时提供了自定义控制。