【问题标题】:How does HBase distribute new regions from MapReduce across the cluster?HBase 如何在集群中分配来自 MapReduce 的新区域?
【发布时间】:2011-12-14 17:43:45
【问题描述】:

我的情况如下:我有一个包含 3 个 ZooKeeper 的 20 节点 Hadoop/HBase 集群。我通过 MapReduce 对从 HBase 表到其他 HBase 表的数据进行了大量处理。

现在,如果我创建一个新表,并告诉任何作业将该表用作输出接收器,它的所有数据都会进入同一个区域服务器。如果只有几个区域,这不会让我感到惊讶。我有一个特定的表有大约 450 个区域,现在问题来了:这些区域中的大多数(大约 80%)都在同一个区域服务器上!

我现在想知道 HBase 如何在整个集群中分配新区域的分配,以及这种行为是正常/理想还是错误。不幸的是,我不知道从哪里开始查找代码中的错误。

我问的原因是这会使工作变得异常缓慢。只有当作业完全完成时,表才会在集群中保持平衡,但这并不能解释这种行为。 HBase 不应该在创建时将新区域分配到不同的服务器吗?

感谢您的输入!

【问题讨论】:

    标签: hadoop hbase


    【解决方案1】:

    默认情况下,它只是平衡每个 RS 上的区域,而不考虑 table。

    您可以设置hbase.master.loadbalance.bytable获取。

    【讨论】:

      【解决方案2】:

      我相信这是一个已知问题。目前 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

      【讨论】:

      • 谢谢你,现在我部分知道为什么会这样了。我的集群在 Cloudera 的 CDH3 上,而 HBase 的版本是 0.90.4。从您的 cmets 中,我了解到集群中有 161 个表可能是个问题?
      • 它只是一个问题,因为 hbase 没有意识到表需要均匀分布,因为它只分布区域。如果您只有一个表,这不太可能发生,但强制所有用户只拥有少量表是不合理的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-13
      • 2016-12-16
      • 1970-01-01
      • 2012-06-16
      相关资源
      最近更新 更多