我的情况如下:我有一个包含3个ZooKeeper的20节点Hadoop/HBase集群。我通过MapReduce处理大量从HBase表格到其他HBase表格的数据。HBase如何通过群集在MapReduce中分配新区域?
现在,如果我创建一个新表并告诉任何作业使用该表作为输出接收器,则其所有数据都会转到同一个区域服务器上。如果只有少数几个地区,这并不会让我感到意外。我拥有的特定表格大约有450个区域,现在出现这个问题:大多数这些区域(大约80%)都在同一个区域服务器上!
我在想,现在HBase如何分配整个群集中新区域的分配以及这种行为是正常/期望还是错误。不幸的是,我不知道从哪里开始寻找我的代码中的错误。
我问的原因是这使得工作变得非常慢。只有当作业完成后,表才能在整个集群中保持平衡,但这并不能解释这种行为。 HBase不应该在创建时将新区域分配给不同的服务器吗?
感谢您的输入!
谢谢你,现在我知道它为什么会发生这种情况。我的群集位于Cloudera的CDH3,HBase的版本是0.90.4。从你的评论中,我收集到可能是我的集群中有161个表的问题? – bwacx
它只是一个问题,hbase没有意识到表需要均匀分布,因为它只分配区域。如果你只有一张桌子,这不太可能发生,但强制所有用户只有少量桌子是不合理的。 – David