Scala:基于行键创建带有预拆分区域的HBase表

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行将进入第

我有三个区域服务器。我想根据我已经确定的行键(比如,rowkey_100和rowkey_200),将一个HBase表均匀地分布到三个regionservres上。可以通过hbase shell使用以下方法完成此操作:

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)

我感谢亚当的回答。谢谢你的回答。