这项工作得到了 Anaconda Inc.Moore Foundation 数据驱动发现计划的支持。

我很高兴宣布 Dask 版本 0.17.2 发布。这是一个包含新功能和稳定性改进的小版本。这篇博文概述了自 2 月 12 日 0.17.0 版本发布以来的显著变化。

您可以使用 conda 安装 Dask

conda install dask

或使用 pip 从 PyPI 安装

pip install dask[complete] --upgrade

完整的更新日志可在此处查看

下面是一些值得注意的变化

Tornado 5.0

Tornado 是一个流行的并发网络编程框架,Dask 对其依赖很大。Tornado 最近发布了一个主要版本更新,其中包含了对 Dask 非常重要的功能,同时也修复了一些错误。

新的 IOStream.read_into 方法允许 Dask 通信(或任何使用此 API 的人)更有效地通过网络传输大型数据集,减少复制次数。这使得 Dask 能够利用现代超级计算机上可用的高性能网络。在我们进行测试的 Cheyenne 系统上,通过这项更改(在使用少量 worker 进程时),我们能够充分利用 Infiniband 网络提供的 3GB/s 带宽。

非常感谢 Antoine PitrouBen Darnell 在这方面做出的努力。

同时,更新到 Tornado 5.0 也出现了一些意料之外的问题。更广泛地使用 bytearrays 而不是 bytes 导致了与 Snappy 等压缩库以及 Python 2 的兼容问题,因为它们不期望这些类型。在 distributed.__version__ == 1.21.3 中有一个短暂的窗口,如果存在 Tornado 5.0 则会启用此功能,但如果同时存在 Snappy 则会行为异常。

HTTP 文件系统

Dask 利用一种 类似文件系统的协议 来访问远程数据。这使得像下面这样的命令能够工作

import dask.dataframe as dd

df = dd.read_parquet('s3://...')
df = dd.read_parquet('hdfs://...')
df = dd.read_parquet('gcs://...')

我们现在添加了 http 和 https 文件系统,用于直接从 Web 服务器读取数据。如果 Web 服务器支持范围查询,这些文件系统也支持随机访问。

df = dd.read_parquet('https://...')

与 S3, HDFS, GCS 等一样,您也可以在 Dask 开发之外使用这些工具。这里我们读取 Pandas 许可证的前二十个字节

from dask.bytes.http import HTTPFileSystem
http = HTTPFileSystem()
with http.open('https://raw.githubusercontent.com/pandas-dev/pandas/master/LICENSE') as f:
    print(f.read(20))
b'BSD 3-Clause License'

感谢完成这项工作并负责 Dask 字节处理的 Martin Durant。更多信息请参阅远程数据文档

修复了 Dask dataframe shuffle 中的一个正确性错误

我们发现并解决了 dask.dataframe 的 shuffle 中的一个正确性错误,该错误导致在进行连接 (joins) 和 groupby-applies 等具有许多分区的复杂操作时丢失一些行。

更多信息请参阅 dask/dask #3201

集群超类和智能自适应部署

有许多 Python 子项目可以帮助您在不同的集群资源管理器上部署 Dask,例如 Yarn、SGE、Kubernetes、PBS 等。这些项目或多或少都具有相同的 API,我们现在已将其整合到一个一致的接口中,下游项目可以在 distributed.deploy.Cluster 中继承该接口。

现在我们有了一个一致的接口,我们开始投入更多精力来改进这些系统的整体接口和智能化程度。这包括如下所示的令人愉快的 IPython 小部件

以及围绕自适应部署的改进逻辑。自适应部署允许集群根据当前工作负载自动进行伸缩。如果您最近提交了大量工作,调度程序将估算其持续时间并请求适量的 worker 以快速完成计算。计算完成后,调度程序将释放 worker 返回系统以释放资源。

这里的逻辑已得到显著改进,包括以下几点

  • 您可以为自适应性指定最小和最大限制
  • 调度程序估算计算持续时间并适当地请求 worker
  • 在归还 worker 时会有一些额外的延迟,以避免滞后或重复请求和返回 worker 的情况。

一些来自相关项目的新闻

  • 新生的 daskernetes 项目已更名为 dask-kubernetes。这取代了之前一个用于在 Google Cloud Platform 上启动 Dask 的项目(该项目尚未发布)。那个项目已更名为 dask-gke
  • 一个新项目 dask-jobqueue 已启动,用于处理在传统的批处理队列系统(如 PBS、SLURM、SGE、TORQUE 等)上启动 Dask 集群。该项目源自 Pangeo 合作。
  • 一个 Dask Helm chart 已添加到 Helm 的稳定通道。

致谢

以下人员自 2 月 12 日 0.17.0 版本发布以来为 dask/dask 仓库做出了贡献:

  • Anderson Banihirwe
  • Dan Collins
  • Dieter Weber
  • Gabriele Lanaro
  • John Kirkham
  • James Bourbeau
  • Julien Lhermitte
  • Matthew Rocklin
  • Martin Durant
  • Max Epstein
  • nkhadka
  • okkez
  • Pangeran Bottor
  • Rich Postelnik
  • Scott M. Edenbaum
  • Simon Perkins
  • Thrasibule
  • Tom Augspurger
  • Tor E Hagemann
  • Uwe L. Korn
  • Wes Roach

以下人员自 2 月 12 日 1.21.0 版本发布以来为 dask/distributed 仓库做出了贡献:

  • Alexander Ford
  • Andy Jones
  • Antoine Pitrou
  • Brett Naul
  • Joe Hamman
  • John Kirkham
  • Loïc Estève
  • Matthew Rocklin
  • Matti Lyra
  • Sven Kreiss
  • Thrasibule
  • Tom Augspurger

博客评论由 Disqus 提供支持