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以上是关于HBase 表拆分的主要内容,如果未能解决你的问题,请参考以下文章