Dask Yarn无法分配工人数量

时间:2019-12-09 08:41:33

标签: yarn dask

我们有一个CDH群集(版本5.14.4),其中包含6个工作服务器,总共384个vcore(每个服务器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应用程序仪表板和Yarn Cluster参数之间的术语。

据我了解:

  1. Yarn Container等于dask worker
  2. 每当生成一个Yarn集群时,都会有2个额外的工作程序/容器正在运行(一个用于Schedualer,一个用于记录器-每个都有1个vCore)
  3. 我仍然需要充分了解n_workers * worker_vcores与n_workers * worker_memory之间的限制。

还有另一个问题-在优化时,我尝试使用cluster.adapt()。群集运行时有10个工作人员,每个工作人员都有10个ntrheads,限制为100GB,但是在Yarn web UI中,仅显示2个运行中的conteiner(我的群集具有384个vCorres和1.9TB,因此仍有足够的扩展空间) 。可能值得提出一个不同的问题。

1 个答案:

答案 0 :(得分:1)

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

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

>>> cluster.application_client.get_containers()

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

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

这应该使您对请求但未分配的内容有所了解。

如果您怀疑dask-yarn中的错误,请随时提出问题(包括来自应用程序主服务器的日志,以进行有问题的运行),但是我怀疑这与您请求的容器大小有关,以及您的队列配置/当前使用方式。