Dask Yarn 未能分配工人数量

Dask Yarn failed to allocate number of workers

我们有一个 CDH 集群(版本 5.14.4),有 6 个工作服务器,总共有 384 个 vcores(每台服务器 64 个核心)。
我们正在 运行使用 dask 2.8.1 版、dask-yarn 0.8 版和 skein 0.8 来 运行 一些 ETL 过程。
目前我们在分配最大数量的工人时遇到问题。
我们无法 运行 拥有超过 18 名工人的工作! (我们可以在 dask dashboad.
中看到实际的工人数量 集群定义如下:

cluster = YarnCluster(environment = 'path/to/my/env.tar.gz',
                      n_workers = 24,
                      worker_vcores = 4, 
                      worker_memory= '64GB'
                      )  

即使将工人数量增加到 50 也没有任何变化,尽管在更改 worker_vcoresworker_memory 时我们可以在仪表板中看到更改。

有什么建议吗?

更新

根据@jcrist 的回答,我意识到我没有完全理解 Yarn web UI application dashboard and the Yarn Cluster 参数之间的术语。

据我了解:

  1. 一个Yarn Container is equal to a dask worker
  2. 每当生成一个 Yarn 集群时,都会有 2 个额外的 workers/containers 运行ning(一个用于调度器,一个用于记录器 - 每个都有 1 个 vCore)
  3. n_workers * worker_vcores 与 n_workers * worker_memory 之间的限制,我仍然需要完全理解。

还有另一个问题 - 在优化时我尝试使用 cluster.adapt(). The cluster was running with 10 workers each with 10 ntrheads with a limit of 100GB but in the Yarn web UI 只显示了 2 个容器 运行ning(我的集群有 384 个 vCorres 和 1.9TB,所以仍有足够的空间来扩展).可能值得提出一个不同的问题。

作业可能被拒绝更多容器的原因有很多。您的集群中是否有足够的内存来分配那么多 64 GiB 块?此外,64 GiB 是否均匀分布在您的集群节点上?您的 YARN 集群是否配置为允许此队列中的大型作业?是否有竞争性工作也在占用资源?

您可以使用ApplicationClient.get_containers方法查看所有容器的状态。

>>> cluster.application_client.get_containers()

您可以过滤状态 REQUESTED 以仅查看待处理的容器

>>> cluster.application_client.get_containers(states=['REQUESTED'])

这应该可以让您了解已请求但未分配的内容。

如果您怀疑 dask-yarn 中存在错误,请随时提交问题(包括来自 application master 的日志以解决有问题的 运行),但我怀疑这更多是与大小有关的问题您请求的容器,以及您的队列是如何使用的 configured/currently。