快速入门

Dask-Yarn 被设计成可以像任何其他 Python 库一样使用——在本地安装它并在您的代码中使用(无论是交互式还是作为应用程序的一部分)。只要您部署的计算机可以访问 YARN 集群(通常是边缘节点),一切都应该正常工作。

在边缘节点上安装 Dask-Yarn

Dask-Yarn 设计用于从边缘节点使用。要安装,请使用 condapip 创建一个新环境并在边缘节点上安装 dask-yarn

Conda 环境

创建一个安装了 dask-yarn 的新的 conda 环境。您可能还希望添加工作中依赖的任何其他包。

$ conda create -n my_env dask-yarn      # Create an environment

$ conda activate my_env                 # Activate the environment

虚拟环境

创建一个安装了 dask-yarn 的新的虚拟环境。您可能还希望添加工作中依赖的任何其他包。

$ python -m venv my_env                 # Create an environment using venv

$ source my_env/bin/activate            # Activate the environment

$ pip install dask-yarn                 # Install some packages

打包您的环境以进行分发

我们需要确保在 Yarn 集群上使用的库与您在本地使用的库相同。默认情况下,dask-yarn 通过将打包的 Python 环境作为应用程序的一部分分发到 Yarn 集群来处理此问题。这通常使用以下方式处理:

有关更多信息,请参阅管理 Python 环境

Conda 环境

如果您尚未安装 conda-pack,现在需要进行安装。您可以将其安装在要打包的环境中,或者安装在您的根环境中(这样它在所有环境中都可用)。

$ conda install -c conda-forge conda-pack   # Install conda-pack

$ conda-pack                                # Package environment
Collecting packages...
Packing environment at '/home/username/miniconda/envs/my_env' to 'my_env.tar.gz'
[########################################] | 100% Completed |  12.2s

虚拟环境

如果您尚未安装 venv-pack,现在需要进行安装。

$ pip install venv-pack                     # Install venv-pack

$ venv-pack                                 # Package environment
Collecting packages...
Packing environment at '/home/username/my-env' to 'my-env.tar.gz'
[########################################] | 100% Completed |  8.3s

Kinit (可选)

如果您的集群配置为使用 Kerberos 进行身份验证,您需要确保在继续之前拥有一个活动的票据授予票据 (ticket-granting-ticket)。

$ kinit

用法

要启动一个 YARN 集群,请创建 YarnCluster 的实例。此构造函数接受多个参数,您可以将它们留空以使用配置中定义的默认值。

from dask_yarn import YarnCluster
from dask.distributed import Client

# Create a cluster where each worker has two cores and eight GiB of memory
cluster = YarnCluster(environment='environment.tar.gz',
                      worker_vcores=2,
                      worker_memory="8GiB")

# Connect to the cluster
client = Client(cluster)

# Do some work here

# Shutdown client and cluster (alternatively use context-manager as shown below):
client.shutdown()
cluster.shutdown()

默认情况下,集群创建时不会启动 worker。要更改 worker 数量,请使用 YarnCluster.scale() 方法。当向上扩展时,将向 YARN 请求新的 worker。当向下缩减时,将智能地选择 worker 并优雅地缩减,从而释放资源。

# Scale up to 10 workers
cluster.scale(10)

# ...

# Scale back down to 2 workers
cluster.scale(2)

另外,您可以使用 YarnCluster.adapt() 方法启用自适应扩展。启用后,集群将根据使用情况自动向上或向下扩展。在这里,我们开启自适应扩展,最小 worker 数为 2 个,最大 worker 数为 10 个。

# Adaptively scale between 2 and 10 workers
cluster.adapt(minimum=2, maximum=10)

如果您在 Jupyter NotebookJupyterLab 中进行交互式工作,您还可以使用提供的图形界面来更改集群大小,而无需手动调用 YarnCluster.scale()YarnCluster.adapt()

Cluster widget in a Jupyter Notebook

通常,集群会一直存在直到 YarnCluster 对象被删除。为了更明确地控制集群何时关闭,您可以将集群用作上下文管理器,或者手动调用 YarnCluster.shutdown()

# Use ``YarnCluster`` as a context manager
with YarnCluster(...) as cluster:
    # The cluster will remain active inside this block,
    # and will be shutdown when the context exits.

# Or manually call `shutdown`
cluster = YarnCluster(...)
# ...
cluster.shutdown()