参考网址: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对象。
进入该函数,将实例化需要的参数赋给自定义算法的类即可。
以上错误得到解决。