HBase预分区region自定义算法

参考网址:http://www.soso.io/article/69759.html

1 编写filesplit.java文件  

2.编译该Java文件。

$ javac -Djava.ext.dirs=/home/test/Desktop/  FileSplit.java

3.将包含有分割键信息的split-keys文件复制到编译生成FileSplit类的目录下。

4.运行如下脚本来在创建表的时候预创建一些区域。

$ $HBASE_HOME/bin/hbase org.apache.hadoop.hbase.util.RegionSplitter test_table FileSplit -c 2 -f f1

5.通过HBase的Web用户界面确认表和预定义区域是否已正确创建。

在命令行界面中,输入RegionSplitter相关指令,得到相应的帮助如下:

lin@zookeeper2:~/Desktop/hbase-1.0.1.1$ ./bin/hbase org.apache.hadoop.hbase.util.RegionSplitter
usage: RegionSplitter <TABLE> <SPLITALGORITHM>
                      SPLITALGORITHM is a java class name of a class
                      implementing SplitAlgorithm, or one of the special
                      strings HexStringSplit or UniformSplit, which are
                      built-in split algorithms. HexStringSplit treats
                      keys as hexadecimal ASCII, and UniformSplit treats
                      keys as arbitrary bytes.
 -c <region count>        Create a new table with a pre-split number of
                          regions
 -D <property=value>      Override HBase Configuration Settings
 -f <family:family:...>   Column Families to create with new table.
                          Required with -c
    --firstrow <arg>      First Row in Table for Split Algorithm
 -h                       Print this usage help
    --lastrow <arg>       Last Row in Table for Split Algorithm
 -o <count>               Max outstanding splits that have unfinished
                          major compactions
 -r                       Perform a rolling split of an existing region
    --risky               Skip verification steps to complete
                          quickly.STRONGLY DISCOURAGED for production
                          systems.

结合RegionSplitter的源代码,我们可以将自己定义的分割Region算法添加进去。在使用自己算法的时候可能会发生以下错误:

发生错误的情况如下:

Exception in thread "main" java.io.IOException: Problem loading split algorithm: 
at org.apache.hadoop.hbase.util.RegionSplitter.newSplitAlgoInstance(RegionSplitter.java:673)
at org.apache.hadoop.hbase.util.RegionSplitter.main(RegionSplitter.java:349)
Caused by: java.lang.InstantiationException: Test.splitTest
at java.lang.Class.newInstance(Class.java:359)
at org.apache.hadoop.hbase.util.RegionSplitter.newSplitAlgoInstance(RegionSplitter.java:671)

... 1 more

产生这个的原因的是自己定义的分割算法引入了一个字符串参数进行函数构造。但是在初始化该类的时候,没有给予参数进行初始化,导致错误。

首先找到RegionSplitter源代码中的static main函数。

里面有相应的cmd参数设置。我们可以在此处添加自己需要的cmd参数;

然后发现分割算法的实例化语句为:

 SplitAlgorithm splitAlgo = newSplitAlgoInstance(conf, splitClass);//实例化自定义splitAlgorithm对象。

进入该函数,将实例化需要的参数赋给自定义算法的类即可。

以上错误得到解决。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值