如何像配置单元表分区一样在Hbase表中创建分区

如何像配置单元表分区一样在Hbase表中创建分区,hbase,Hbase,我们计划从CDH3迁移到CDH4,作为迁移的一部分,我们还计划将HBASE引入系统,因为它也会更新数据,在CDH3中,我们使用Hive作为仓库 这里我们遇到了迁移中的主要问题,配置单元支持到表的分区。我们的系统有许多不同模式的表,有些表有基于日期的分区,我们有过去5年的数据历史(有些表中有365*5个分区) 我们也希望在HBase中实现同样的行为,当我浏览时,我找不到在HBase中创建分区的解决方案。有谁能帮我在HBase中实现这个分区智能表创建吗 我们选择HBASE的原因是,它支持更新 如果H

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

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

我们也希望在HBase中实现同样的行为,当我浏览时,我找不到在HBase中创建分区的解决方案。有谁能帮我在HBase中实现这个分区智能表创建吗

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

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


如果我们至少能找到一些解决方案,这将非常有帮助。

恐怕您无法像在Hive中那样在HBase中对数据进行分区。这两种工具在设计和行为上都有很大的不同。HBase中的数据已经为您进行了分区,因为HBase对密钥空间进行了分区,每个分区就是我们所说的表。如果仍然需要更细粒度的分区,可以通过明智地使用列族来实现

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


编辑:


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

HBase有一个接近分区的概念,称为分区。但是,HBase中的这些分区与Hive(或RDBMS)分区不同。每个区域都有一个密钥范围,但您可以通过拆分或分割将密钥范围拆分为更小的区域-例如,如果原始区域包含密钥0-9,则可以将其拆分为两个更小的区域0-4和5-9或十个分区0,1,2。。。等等

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


但是,您应该注意,最重要的字节是顺序的键会降低写入速度(如果您正在进行一次性加载,可能不会成为问题)这是一个称为“热点”的问题-您可以在一个

很高兴看到您的回复中读到它和克服它的示例方法,但在一天内我们有将近1000多万条记录,所以我们希望每天都有分区,这将创建很多列族,这不是一个好的设计。我们正在为每个模式寻找按天划分的分区。有什么办法吗?如果您将这些记录作为一行推送,其中rowkey将以特定日期作为前缀,那么会有什么问题?很好,因此一个row key将有1000多万条记录,是否可以检索一条带有主键id的记录(oracle中实际的主键id是id)并对其进行更新。在这种情况下,我们检索记录的速度有多快。或者,您也可以使用unix时间戳作为行键,通过将时间戳转换为日期来区分每一天。但这可能会导致进程减慢。这可能不是一个有效的方法。假设我有一个名为“demoschema”的模式,它有一个名为“transtable”的表,它将有每天的分区,每个分区都有超过1000万条记录,您能告诉我这将如何适合HBASE吗?您希望在该表中存储多少年?您当前的密钥是什么?目前在Oracle中,TID是主键,当我们将数据带到配置单元时,我们会将其放入按日期划分的分区中。目前我们在Hive中有5年的历史数据作为每日分区。因此,我们在Hive中的系统中有大约365*5个分区,每天它将创建一个新分区,并将1000万条新记录放入该分区。好的,您有多少个更新?它是只针对新数据还是旧数据(如果只有新数据,您可以在HBase中放置几天的数据,然后在稳定后将其导出到hive)。另外,您需要什么样的保留?我们将维护数据和新数据的历史记录。我们可能需要在2013-01-15日期更新数据。因此,我们需要将这些数据始终保存在HBASE中。