3

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

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

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

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

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

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

4

2 回答 2

3

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

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

但是,您应该注意,最重要的字节是连续的键会减慢您的写入速度(如果您正在进行一次性加载,这可能不是问题)一个称为“热点”的问题 - 您可以阅读它以及来自 sematext 的 Alex Baranau的博客文章中克服它的示例方法

于 2013-09-26T06:14:58.950 回答
0

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

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


编辑 :

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

于 2013-09-25T09:58:55.157 回答