我建立了一个4核(2GHz)和16核(1.8GHz)虚拟机的集群。创建和连接到群集没有问题。但是现在我想对集群进行一些深入的学习,在那里我看到这两个虚拟机的性能使用分布不均匀。具有4个内核的那个总是处于100%CPU使用率,而16个核心机器在大多数时间处于空闲状态。
我是否必须在群集生成期间进行其他配置?因为对我来说奇怪的是,两者中更强大的机器是空闲的,而较弱的机器完成所有的工作。
祝你好运, 马库斯
答案 0 :(得分:1)
这里要记住两件事。
您的数据需要足够大才能利用数据并行性。特别是,每列的块数需要足够大,以便所有内核都能完成工作。有关详细信息,请参阅此答案:H2O not working on parallel
H2O-3假设您的节点是对称的。它不会尝试根据节点的功能在群集中进行负载平衡。更快的节点将首先完成其工作并等待空闲以使较慢的节点赶上。 (如果您有两个对称节点,但其中一个节点忙于运行另一个进程,您可以看到同样的效果。)
对于内存(其中较小的节点可能耗尽内存并完全失败)而言,不对称是一个更大的问题,而不是CPU(某些节点只是在等待)。因此,请始终确保以-Xmx
的相同值启动每个H2O节点。
您可以使用-nthreads
选项限制H2O使用的核心数。因此,您可以尝试给出两个节点-nthreads 4
中的每个节点,并查看它们是否更加对称,每个节点使用大约四个核心。在您描述的情况下,这意味着较小的机器大约100%被利用,而较大的机器大约使用25%。 (但由于两台机器可能有不同的芯片,因此核心可能不完全相同,并且不能完美平衡,这是可以的。)
[我完全忽略了虚拟化方面,但根据虚拟机管理程序的配置,CPU份额也可能会出现。]