HBase表拆分

HBase表拆分,hbase,Hbase,我正在尝试创建带有预拆分的HBase表。其中,我有一个行键作为bucket number、schema和pkid的组合。我可以使用{'00000000000000000'、'100000000000000'、'200000000000000000'、…..'f000000000000000'}对表进行预拆分。是否有一种方法可以使用自动拆分策略自动执行此操作。这将有助于我将架构名称也包括到拆分中,如'0MD5(schema1)000000000…,'1MD5(schema1)000000000…,

我正在尝试创建带有预拆分的HBase表。其中,我有一个行键作为bucket number、schema和pkid的组合。我可以使用
{'00000000000000000'、'100000000000000'、'200000000000000000'、…..'f000000000000000'}
对表进行预拆分。是否有一种方法可以使用自动拆分策略自动执行此操作。这将有助于我将架构名称也包括到拆分中,如
'0MD5(schema1)000000000…,'1MD5(schema1)000000000…,,…,'fMD5(schema1)000000000…,'0MD5(schema2)000000000…,…

上面的拆分将帮助我定义一个更好的设计。这里我们不能定义模式的数量,现在我们正在为10个模式创建一个表,将来还会为更多的模式创建一个表。我们需要在这个表中插入数据。因此,我正在寻找一种更好的分割策略设计

我还查找了
KeyPrefixRegionSplitPolicy
,看起来这会有所帮助,我对此不是很确定


有人能帮我吗。

KeyPrefixRegion政策可以满足您的需要
下面是一些代码示例可能会有所帮助

    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”将通过rowkey前缀1自动拆分分区区域

Yes,此信息帮助我继续执行keyprefexregionpolicy。但我厌倦了一些示例,当我插入多行时,行键id的值为(123234456,test1234)。我预计它将在hdfs中创建4个区域。但是我看不到4个区域,我只能看到一个区域。我在这里做错了什么吗?只有当区域大小达到“hbase.hregion.max.filesize”时,区域才会进行分割。如果您没有在表描述符中设置,默认值为10G,因为hbase0.94+我在执行此测试时已将区域大小配置为256 MB,但我导入的数据超过了该大小,我将对此进行交叉验证。但这在HBase中是一个非常好的概念。预拆分您的HBase表,然后数据将被分散,HBase org.apache.hadoop.HBase.util.regionspliter HexStringSplit-c-f