【问题标题】:Automatically distribute data in HBase (without pre-splitting)在 HBase 中自动分发数据(无需预拆分)
【发布时间】:2021-12-15 18:49:33
【问题描述】:

Salting, Hashing, and reversing of key, are recognise as techniques to avoid region Hot-spotting in HBase。尽管如此,当我尝试通过应用加盐和反向密钥方法(在两个不同的场景中)来摄取 8000 条数据记录时,我仍然看到我的所有数据都被摄取到一个区域中。我想知道,在尝试避免区域热点时,是否需要在创建表时预先拆分 HBase 表,以便从 HBase 中的加盐和密钥反转中受益。有没有一种技术可以在不执行manual region splitting in HBase tables 的情况下将数据摄取到多个区域。

【问题讨论】:

    标签: hbase hotspot


    【解决方案1】:

    加盐、散列等只是设计行键结构的一种方式,以便利用已经根据您的行键设计选择拆分的表。默认情况下,您的表在创建时只有一个区域,除非您进行预拆分。该区域将覆盖您的行键值的整个范围,因此您如何设计行键并不重要。所有记录都将发送到一个区域,而无论哪个 Region Server 恰好被分配为该区域提供服务,它将是唯一一个为请求提供服务的服务器。

    如果您将大量数据提取到表中并且您的默认区域超出区域大小限制,HBase 会自动将该区域分成两半,因此两个区域服务器将接受请求。但是,在您的情况下,您只摄取了 8000 条记录。这太小而无法触发区域拆分。你真的不想把它留给 HBase 来处理区域分割,因为根据定义它意味着热点正在发生。

    因此,在创建时预拆分您的表,并确保您的预拆分方式在您设计行键的上下文中是有意义的。

    【讨论】:

    • 感谢您的回复。当我尝试摄取 800000 条数据记录时,我观察到了同样的情况。即使我使用了盐渍,它们仍然被摄入到一个区域服务器中。我想我必须在创建表时预先拆分我的表。
    • 摄取多少记录并不重要,重要的是区域大小(以字节为单位)。我认为如果您的区域大小超过 HBase 配置中指定的区域大小限制,那么 HBase 将自动拆分该区域。是的,您必须预先拆分表格才能利用盐渍/等。马上。
    • 顺便说一句,为了更好地理解这一点,您应该做一件简单的事情:在 HBase UI 中,单击您的表,然后单击您的区域(它应该是唯一的区域)。在那里,您会看到该区域负责的行键值范围。这应该让您知道,无论您如何腌制/等,所有这些值都在该区域涵盖的范围内。并且此区域在达到最大区域大小设置中指定的大小之前不会被拆分。
    猜你喜欢
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 2016-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-19
    相关资源
    最近更新 更多