(四)region代码实现

1.  在创建表时,直接分区,split分为10个区,插入100条数据,每个分区十条数据


import java.io.IOException;
import java.math.BigInteger;


import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.client.HBaseAdmin;
import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.util.RegionSplitter.SplitAlgorithm;


import net.spy.memcached.compat.log.Logger;
import net.spy.memcached.compat.log.LoggerFactory;


public class RegionPair  implements SplitAlgorithm{
//日志显示
private static final Logger LOG = LoggerFactory.getLogger(RegionPair.class);
/*
 * **************************实现预分区
 */


   public static void main(String[] args) throws IOException {
       Configuration configuration = HBaseConfiguration.create();
       configuration.set("hbase.zookeeper.quorum", "localhost");
       HBaseAdmin hBaseAdmin = new HBaseAdmin(configuration);
      String tablename="rt_user_tags_test";
if (hBaseAdmin.tableExists(tablename)) {
try {
hBaseAdmin.disableTable(tablename);
hBaseAdmin.deleteTable(tablename);
} catch (Exception ex) {
ex.printStackTrace();
}
}
       //建表
       HTableDescriptor tableDescriptor = new HTableDescriptor("rt_user_tags_test");
       //添加列族到表中
       tableDescriptor.addFamily(new HColumnDescriptor("tags"));
       //拆分策略可重写byte[][] split,在SplitAlgorithm接口中
       byte[][] splits = getHexSplits("0", "100", 10);
       createTable(hBaseAdmin, tableDescriptor, splits);
       for (int i = 0; i < 100; i++) {
        if(i<10){
        //插入数据insertData----------->表名+配置+主键+列族
           insertData("rt_user_tags_test", configuration, (new Integer("000000000"+String.valueOf(i))).toHexString(new Integer("000000000"+String.valueOf(i))), "tags");
        }else{
           insertData("rt_user_tags_test", configuration, "00000000"+String.valueOf(i), "tags");
        }
       }
   }
   
   
        /*
         * 建表
         * 创建表格时
         */
   public static boolean createTable(HBaseAdmin hBaseAdmin, HTableDescriptor tableDescriptor, byte[][] splits) throws IOException {
       try {
           hBaseAdmin.createTable(tableDescriptor, splits);
           return true;
       } catch (Exception e) {
           LOG.info("table" + tableDescriptor.getNameAsString() + "already exists!");
           return false;
       }
   }
        /*
         * 设置startKey,endKey
         */
   public static byte[][] getHexSplits(String startKey, String endKey, int numRegions) {
       //startKey:001, endKey:100, 10regions[001, 010], [011, 020],...
       byte[][] splits = new byte[numRegions - 1][];
       BigInteger lowestKey = new BigInteger(startKey, 10);
       BigInteger highestKey = new BigInteger(endKey, 10);
       BigInteger rangge = highestKey.subtract(lowestKey);
       BigInteger regionIncrement = rangge.divide(BigInteger.valueOf(numRegions));
       lowestKey = lowestKey.add(regionIncrement);
       for (int i = 0; i < numRegions - 1; i++) {
           BigInteger key = lowestKey.add(regionIncrement.multiply(BigInteger.valueOf(i)));
           byte[] b = String.format("%010x", key).getBytes();
           splits[i] = b;
       }
       return splits;
   }
        /*
         * 插入数据
         */
   public static void insertData(String tableName, Configuration configuration, String rowkey, String columnFamily) throws IOException {
       System.out.println("start insert data ......");
       HTable table = new HTable(configuration, "rt_user_tags_test");
       Put put = new Put(rowkey.getBytes());
       put.add(columnFamily.getBytes(), null, "Java".getBytes());
       try {
           table.put(put);
       } catch (IOException e) {
           e.printStackTrace();
       }
       System.out.println("end insert data ......");
   }


}

 

posted @ 2017-12-11 00:00  appointint  阅读(193)  评论(0编辑  收藏  举报