zoukankan      html  css  js  c++  java
  • (四)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 ......");
       }
    
    
    }
  • 相关阅读:
    JPA
    XMPP技术之Smack库的自定义消息扩展
    VMVare的窗口自适应
    linux c tcp p2p
    linux 消息队列
    基数排序-LSD
    基数排序-纪念欧某新
    归并排序
    锦标赛排序
    快速排序 之添加复合插入排序和原始序列取中值左pivot
  • 原文地址:https://www.cnblogs.com/apppointint/p/8885311.html
Copyright © 2011-2022 走看看