HBase Region的多点分割
功能简介
一般通过org.apache.hadoop.hbase.client.HBaseAdmin进行多点分割。
分割操作只对空Region起作用。
可在创建表时对表进行预分区,或者对某些region直接进行split操作来替代。
本例使用multiSplit进行多点分割将HBase表按照“A~D”、“D~F”、“F~H”、“H~Z”分为四个Region。
代码样例
以下代码片段在com.huawei.bigdata.hbase.examples包的“HBaseExample”类的testMultiSplit方法中。
public void testMultiSplit() { LOG.info("Entering testMultiSplit."); Table table = null; Admin admin = null; try { admin = conn.getAdmin(); // initilize a HTable object table = conn.getTable(tableName); Set<HRegionInfo> regionSet = new HashSet<HRegionInfo>(); List<HRegionLocation> regionList = conn.getRegionLocator(tableName).getAllRegionLocations(); for (HRegionLocation hrl : regionList) { regionSet.add(hrl.getRegionInfo()); } byte[][] sk = new byte[4][]; sk[0] = "A".getBytes(); sk[1] = "D".getBytes(); sk[2] = "F".getBytes(); sk[3] = "H".getBytes(); for (HRegionInfo regionInfo : regionSet) { ((HBaseAdmin) admin).multiSplit(regionInfo.getRegionName(), sk); } LOG.info("MultiSplit successfully."); } catch (Exception e) { LOG.error("MultiSplit failed ", e); } finally { if (table != null) { try { // Close table object table.close(); } catch (IOException e) { LOG.error("Close table failed ", e); } } if (admin != null) { try { // Close the Admin object. admin.close(); } catch (IOException e) { LOG.error("Close admin failed ", e); } } } LOG.info("Exiting testMultiSplit."); }