【问题标题】:HBase table splittingHBase 表拆分
【发布时间】:2013-12-29 10:46:59
【问题描述】:

我正在尝试使用预拆分创建 HBase 表。我有一个行键作为存储桶编号、模式和 pkid 的组合。我可以预先分割表格,范围为{'00000000000000000', '10000000000000000', '20000000000000000',.....'f0000000000000000'}。有没有办法可以使用自动拆分策略自动执行此操作。这将帮助我将架构名称也包括在'0MD5(schema1)000000000...', '1MD5(schema1)000000000...', ...,'fMD5(schema1)000000000...', '0MD5(schema2)000000000...',.....

之类的拆分中

上述拆分将帮助我定义更好的设计。在这里我们无法定义模式的数量,现在我们正在为 10 个模式创建表,并且将来会为更多模式创建表。我们需要在这个表中插入数据。所以我正在寻找更好的拆分策略设计。

我也找过KeyPrefixRegionSplitPolicy,看来这会有所帮助,我对此不太确定。

谁能帮帮我。

【问题讨论】:

    标签: hbase


    【解决方案1】:

    KeyPrefixRegionSplitPolicy 可以满足你的需求
    这是一些代码示例可能会有所帮助

        HBaseAdmin admin = new HBaseAdmin(conf);
        HTable hTable = new HTable(conf, "test");
        HTableDescriptor htd = hTable.getTableDescriptor();
        HTableDescriptor newHtd = new HTableDescriptor(htd);
        newHtd.setValue(HTableDescriptor.SPLIT_POLICY,     KeyPrefixRegionSplitPolicy.class.getName());
        newHtd.setValue("prefix_split_key_policy.prefix_length", "1");
        admin.disableTable("test");
        admin.modifyTable(Bytes.toBytes("test"), newHtd);
        admin.enableTable("test");
    

    现在表'test'将自动分割区域,按行键前缀1进行分区

    【讨论】:

    • 是的,这些信息帮助我继续使用 KeyPrefixRegionPolicy。但是我厌倦了一些例子,当我插入多行时,我的行键 id 的值为 (123, 234, 456, test1234)。我预计它将在 hdfs 中创建 4 个区域。但我看不到 4 个区域,我只能看到一个区域。我在这里做错什么了吗?
    • 一个区域只有在区域大小达到“hbase.hregion.max.filesize”时才进行分割,如果你的表描述符中没有设置,从hbase0.94+开始默认为10G
    • 我在进行此测试时已将区域大小配置为 256 MB,但我导入的数据超过了该大小,我将对此进行交叉验证。但这在 HBase 中是一个非常好的概念。
    • 预先拆分您的 Hbase 表,然后数据将得到传播,hbase org.apache.hadoop.hbase.util.RegionSplitter HexStringSplit -c -f
    猜你喜欢
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 2016-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-15
    • 1970-01-01
    相关资源
    最近更新 更多