如何在Hbase表中创建分区与Hive表分区一样

时间:2013-09-25 09:45:37

标签: hbase

我们计划从CDH3迁移到CDH4,作为此迁移的一部分,我们还计划将HBASE引入系统,因为它也会更新数据,在CDH3中我们使用Hive作为仓库。

这里我们遇到了迁移中的主要问题,Hive支持分区到表。我们的系统在不同的模式中有许多表,有些表具有基于日期的分区,我们有过去5年的数据历史(某些表中存在365 * 5个分区)。

我们想在HBase中实现相同的行为,当我浏览时,我无法找到在HBase中创建分区的解决方案。任何人都可以帮助我在HBase中实现这个分区wised表创建。

我们选择HBASE的原因是,它支持更新。

如果HBASE不支持,那么其他(如MangoDB,Cassandra)支持我们的行为。

如果我们能找到至少一些解决方案,那么它真的很有帮助。

2 个答案:

答案 0 :(得分:3)

HBase有一个接近分区的概念,称为region。但是HBase中的这些分区不像Hive(或RDBMS)分区那样工作。每个区域都包含一系列键,但您可以通过拆分或分割将键区域分成更小的区域 - 例如如果您的原始区域包含0-9键,则可以将其分为两个较小的区域0-4和5-9或十个分区0,1,2 ......等。

如果您的密钥是复合的,那么日期将是它的第一部分,然后是您今天的密钥,您可以预先拆分hbase,以便每天获得一个或多个区域。

但是,您应该注意,最重要的字节是顺序的键会减慢您的写入速度(如果您正在进行一次性加载,则可能不是问题)一个称为“热点”的问题 - 您可以阅读它以及在blog post by Alex Baranau from sematext

中克服它的示例方法

答案 1 :(得分:0)

我担心你不能像在Hive中那样对HBase中的数据进行分区。这两种工具在设计和行为方面都有很大的不同。 HBase中的数据有点已经为您分区,因为HBase对密钥空间进行了分区,每个分区都是我们称之为表的。如果您仍然需要更细粒度的分区,则可以通过明智地使用列族来实现。

例如,您可以拥有每年的列系列。所以,你将拥有一个包含5个列族的表。


修改:

如果您需要上次评论中提到的内容,则可以创建预分割表格。您可以根据自己的方便选择区域的开始和结束行键。比如,每天一个分区,其中第一个和最后一个条目分别是该特定区域的起始行和结束边界。