HBase 表拆分

Posted

技术标签:

【中文标题】HBase 表拆分【英文标题】:HBase table splitting 【发布时间】: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,看来这会有所帮助,我对此不太确定。

谁能帮帮我。

【问题讨论】:

【参考方案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

以上是关于HBase 表拆分的主要内容,如果未能解决你的问题,请参考以下文章

针对不同映射器的 HBase MapReduce 拆分扫描

HBase--Split和Compact

如果具有 hbase 表区域的节点出现故障会发生啥

Hbase的region合并与拆分详解

Hbase如何拆分多个regionServer中的记录?

HBase的region管理