【问题标题】:How To Create Partitions In Hbase Table As Like Hive Table Partitions如何像 Hive 表分区一样在 Hbase 表中创建分区
【发布时间】:2013-09-25 09:45:37
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: hbase


    【解决方案1】:

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

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

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

    【讨论】:

    • 假设我有一个名为“demoschema”的模式,它有一个名为“transtable”的表,它将有每日分区,每个分区有超过 1000 万条记录,你能请简要介绍一下这将如何适合 HBASE。
    • 你想在那个表中存储多少年?你现在的钥匙是什么?
    • 目前在 Oracle 中,TID 是主键,当我们将该数据带到 Hive 时,我们将放入按日期划分的分区。目前我们将 Hive 中 5 年的数据历史记录为每日分区。所以我们在 Hive 的系统中大约有 365 * 5 个分区,每天它会创建一个新分区并将 1000 万条新记录放入该分区。
    • 好的,你有多少更新?是仅用于新数据还是旧数据(如果只有新数据,您可以在 HBase 中放置几天的数据,然后在稳定后将其导出到 hive)。您还需要什么样的留存率?
    • 我们将维护历史数据和新数据。有可能我们有时也需要更新@2013-01-15 日期的数据。所以我们需要将这些数据始终保存在 HBASE 中。
    【解决方案2】:

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

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


    编辑:

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

    【讨论】:

    • 很高兴看到你的回复,但是一天之内我们有将近 10+ 百万条记录,所以我们希望每天都有分区,这会创建这么多列族,这不是一个好主意设计去。我们正在为每个模式寻找按天划分的分区。有什么办法吗?
    • 如果将这些记录中的每一个作为一行推送,其中的 rowkey 将以特定日期为前缀,会有什么问题?
    • 好一个,所以一个行键将有10+百万条记录,是否可以用主键ID检索一条记录(oracle中的实际主键ID是ID)并更新它。在这种情况下,我们检索该记录的速度有多快。
    • 或者您也可以使用 unix 时间戳作为行键,您可以通过将时间戳转换为日期来区分每一天。但这可能会导致您的流程变慢。
    • 这可能效率不高。
    猜你喜欢
    • 2015-11-07
    • 1970-01-01
    • 2021-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多