我的情况如下:我有一个包含3个ZooKeeper的20节点Hadoop / HBase集群。我通过MapReduce从HBase表到其他HBase表进行了大量数据处理。
现在,如果我创建一个新表,并告诉任何作业将该表用作输出接收器,那么它的所有数据都会转到同一个regionserver上。如果只有少数地区,这不会让我感到惊讶。我有一个特定的表有大约450个区域,现在出现了问题:大多数区域(大约80%)位于同一个区域服务器上!
我现在想知道HBase如何在整个集群中分配新区域的分配以及这种行为是正常/期望还是错误。遗憾的是,我不知道从哪里开始查找代码中的错误。
我问的原因是这会让工作变得异常缓慢。只有当作业完全完成时,表才会在整个集群中得到平衡,但这并不能解释这种行为。 HBase不应该在创建时将新区域分配给不同的服务器吗?
感谢您输入!
答案 0 :(得分:0)
我认为这是一个众所周知的问题。目前,HBase在整个集群中分布区域,而不考虑它们属于哪个表。
查阅HBase书籍了解背景信息: http://hbase.apache.org/book/regions.arch.html
可能是您使用旧版本的hbase: http://comments.gmane.org/gmane.comp.java.hadoop.hbase.user/19155
有关负载平衡和区域移动的讨论,请参阅以下内容 http://comments.gmane.org/gmane.comp.java.hadoop.hbase.user/12549
答案 1 :(得分:0)
默认情况下,它只是平衡每个RS上的区域而不考虑使用表格。
您可以设置notepad ++
来获取它。