我有一个关于负载均衡器的基本问题。我刚刚在我们的hadoop(2.3)集群中添加了新节点,该集群也有hbase v0.98。添加并在hadoop和hbase中使所有节点联机后,
如何通过hadoop再平衡器影响hbase?在hadoop重新平衡后,我是否需要明确尝试重新平衡hbase?
我的Hadoop集群完全被hbase占用。设置balancer_switch = true,它会自动重新平衡hbase和hadoop吗?
确保hadoop和hbase都重新平衡并且工作正常的最佳方法是什么?
答案 0 :(得分:14)
Hadoop(HDFS)平衡器将块从一个节点移动到另一个节点以尝试使其成为每个数据节点具有相同数量的数据(在可配置的阈值内)。这会混淆HBases的数据位置,这意味着特定区域可能正在为不再位于其本地主机上的文件提供服务。
HBase的balance_switch平衡群集,以便每个regionserver拥有相同数量的区域(或接近)。这与Hadoop(HDFS)平衡器是分开的。
如果您只运行HBase,我建议不要运行Hadoop(HDFS)平衡器,因为它会导致某些区域丢失其数据位置。这导致对该区域的任何请求必须通过网络到达为其服务的HFile的数据节点之一。
虽然恢复了HBase的数据位置。每当发生压缩时,所有块都会本地复制到服务该区域并合并的regionserver。此时,恢复该区域的数据位置。有了这个,你真正需要做的就是添加新的节点。 Hbase将负责重新平衡区域,一旦这些区域紧凑,数据局部性将得到恢复。
答案 1 :(得分:3)
Hadoop默认不进行块级平衡。您可以使用一些工具在Hadoop中手动进行平衡,即https://hadoop.apache.org/docs/r2.4.1/hadoop-project-dist/hadoop-common/CommandsManual.html#balancer。请注意,如果您刚刚添加到其他完整集群中的少量完全空或新节点,平衡HDFS实际上非常昂贵,而且我的经验是,它只能平衡HDFS块的工作。 。多次运行平衡器可以改善整体平衡。还有一些替代实现可以比Hadoop内置的更好地实现平衡。
如果单击" Live Nodes"您可以从HDFS NameNode UI检查块的余额。链接。 "使用的块池" column是用于此目的的有用列。如果您发现各种计算机上使用的块百分比差异很大,那么您可能需要重新平衡HDFS集群。
balancer_switch
仅影响区域服务器余额。默认情况下,HBase会自动平衡群集中的区域,但您可以随时从balancer
手动运行hbase shell
。
您可以在"区域服务器部分"下的HBase主UI的主页面中检查区域平衡。在名为" Load"的列中,有一个名为" numberOfOnlineRegions"的值。一般来说,HBase在保持平衡方面做得相当不错。在我最初创建表格时,我只见过几次默认平衡算法会出现一组偏斜的区域。无论如何,区域平衡器实际上相当便宜并且可以很快完成。运行一次通常足以让你进入一个非常平衡的状态。