我们有一个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_vcores
或worker_memory
时,我们可以在仪表板上看到更改。
有什么建议吗?
更新
在@jcrist后面,我意识到我不完全了解Yarn web UI应用程序仪表板和Yarn Cluster参数之间的术语。
据我了解:
还有另一个问题-在优化时,我尝试使用cluster.adapt()。群集运行时有10个工作人员,每个工作人员都有10个ntrheads,限制为100GB,但是在Yarn web UI中,仅显示2个运行中的conteiner(我的群集具有384个vCorres和1.9TB,因此仍有足够的扩展空间) 。可能值得提出一个不同的问题。
答案 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中的错误,请随时提出问题(包括来自应用程序主服务器的日志,以进行有问题的运行),但是我怀疑这与您请求的容器大小有关,以及您的队列配置/当前使用方式。