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 ......");
       }
    
    
    }
  • 相关阅读:
    Django对静态文件的处理——部署阶段
    使用Django来处理对于静态文件的请求
    Django1.7如何配置静态资源访问
    Spring WebSocket中403错误解决
    FastJSON JSONObject 字段排序 Feature.OrderedField
    国际化(i18n) 各国语言缩写
    【转】java.io.Closeable接口
    【转】spring bean 卸载
    This content should also be served over HTTPS
    Failed to close the ServletOutputStream connection cleanly, Broken pipe
  • 原文地址:https://www.cnblogs.com/apppointint/p/8885311.html
Copyright © 2011-2022 走看看