Scala:基于行键创建带有预拆分区域的HBase表
我有三个区域服务器。我想根据我已经确定的行键(比如,rowkey_100和rowkey_200),将一个HBase表均匀地分布到三个regionservres上。可以通过hbase shell使用以下方法完成此操作:Scala:基于行键创建带有预拆分区域的HBase表,scala,apache-spark,hbase,hadoop2,Scala,Apache Spark,Hbase,Hadoop2,我有三个区域服务器。我想根据我已经确定的行键(比如,rowkey_100和rowkey_200),将一个HBase表均匀地分布到三个regionservres上。可以通过hbase shell使用以下方法完成此操作: create 'tableName', 'columnFamily', {SPLITS => ['rowkey_100','rowkey_200']} 如果我没有弄错的话,这2个分割点将创建3个区域,前100行将进入第一个regionserver,接下来的100行将进入第
create 'tableName', 'columnFamily', {SPLITS => ['rowkey_100','rowkey_200']}
如果我没有弄错的话,这2个分割点将创建3个区域,前100行将进入第一个regionserver,接下来的100行将进入第二个regionserver,其余的行进入最后一个regionserver。我想用scala代码做同样的事情。如何在scala代码中指定这一点以将表拆分为区域 这段java代码可以提供帮助
HTableDescriptor td = new HTableDescriptor(TableName.valueOf("tableName"));
HColumnDescriptor cf = new HColumnDescriptor("cf".getBytes());
td.addFamily(cf);
byte[][] splitKeys = new byte[] {key1.getBytes(), key2.getBytes()};
HBaseAdmin dbAdmin = new HBaseAdmin(conf);
dbAdmin.createTable(td, splitKeys);
下面是用于创建带有拆分的HBase表的Scala代码段:
val admin = new HBaseAdmin(conf)
if (!admin.tableExists(myTable)) {
val htd = new HTableDescriptor(myTable)
val hcd = new HColumnDescriptor(myCF)
val splits = Array[Array[Byte]](splitPoint1.getBytes, splitPoint2.getBytes)
htd.addFamily(hcd)
admin.createTable(htd, splits)
}
有一些预定义的区域分割策略,但如果您想创建自己的方式来设置跨越rowkey范围的分割点,可以创建一个简单的函数,如下所示:
def autoSplits(n: Int, range: Int = 256) = {
val splitPoints = new Array[Array[Byte]](n)
for (i <- 0 to n-1) {
splitPoints(i) = Array[Byte](((range / (n + 1)) * (i + 1)).asInstanceOf[Byte])
}
splitPoints
}
def自动分裂(n:Int,范围:Int=256)={
val splitPoints=新数组[数组[字节]](n)
我感谢亚当的回答。谢谢你的回答。