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_vcores
或 worker_memory
时我们可以在仪表板中看到更改。
有什么建议吗?
更新
根据@jcrist 的回答,我意识到我没有完全理解 Yarn web UI application dashboard and the Yarn Cluster 参数之间的术语。
据我了解:
- 一个Yarn Container is equal to a dask worker。
- 每当生成一个 Yarn 集群时,都会有 2 个额外的 workers/containers 运行ning(一个用于调度器,一个用于记录器 - 每个都有 1 个 vCore)
- 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。
我们有一个 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_vcores
或 worker_memory
时我们可以在仪表板中看到更改。
有什么建议吗?
更新
根据@jcrist 的回答,我意识到我没有完全理解 Yarn web UI application dashboard and the Yarn Cluster 参数之间的术语。
据我了解:
- 一个Yarn Container is equal to a dask worker。
- 每当生成一个 Yarn 集群时,都会有 2 个额外的 workers/containers 运行ning(一个用于调度器,一个用于记录器 - 每个都有 1 个 vCore)
- 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。