博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HBASE的预分区设计
阅读量:4984 次
发布时间:2019-06-12

本文共 7974 字,大约阅读时间需要 26 分钟。

hbase生成分区种子    1 package com.spdbccc.edm.storm.common;  2   3 import java.util.List;  4   5 import org.apache.commons.lang3.StringUtils;  6 import org.apache.hadoop.hbase.util.Bytes;  7   8 import com.google.common.collect.Lists;  9  10 /** 11  * HBase表管理器, 对Hbase表的rowkey规则生成,表名规则定义 12  *  13  * @author WJ 14  * 15  */ 16 public class HTableManager { 17  18     public static final byte[] DEFAULT_FAMILY_NAME = Bytes.toBytes("f1"); 19  20     private static final String[] PARTITIONS = generatPartitionSeed(); 21  22     /** 23      * 生成3844个分区种子 24      *  25      * @return String[] 26      */ 27     public static String[] generatPartitionSeed() { 28         List
seeds = Lists.newArrayList(); 29 for (int i = '0'; i <= '9'; i++) { 30 seeds.add((char) i); 31 } 32 for (int i = 'A'; i <= 'Z'; i++) { 33 seeds.add((char) i); 34 } 35 for (int i = 'a'; i <= 'z'; i++) { 36 seeds.add((char) i); 37 } 38 int k = 0; 39 String[] partions = new String[seeds.size() * seeds.size()]; 40 for (int i = 0; i < seeds.size(); i++) { 41 for (int j = 0; j < seeds.size(); j++) { 42 partions[k] = StringUtils.join(seeds.get(i), seeds.get(j)); 43 k++; 44 } 45 } 46 return partions; 47 } 48 49 /** 50 * 按指定数量生成分区种子 51 * 52 * @param limit 53 * @return String[] 54 */ 55 public static String[] generatPartitionSeed(int limit) { 56 int size = PARTITIONS.length; 57 int[] space = new int[limit]; 58 for (int pt = 0; pt < size;) { 59 for (int j = 0; j < space.length; j++) { 60 ++space[j]; 61 pt++; 62 if (pt == size) { 63 break; 64 } 65 } 66 } 67 String[] seed = new String[limit + 1]; 68 int position = 0; 69 for (int i = 0; i < space.length; i++) { 70 seed[i] = PARTITIONS[position]; 71 position += space[i]; 72 } 73 seed[seed.length - 1] = PARTITIONS[PARTITIONS.length - 1]; 74 return seed; 75 } 76 77 public static String generatRowkey(String str) { 78 int i = Math.abs(str.hashCode() % PARTITIONS.length); 79 return StringUtils.join(PARTITIONS[i], "-", str); 80 } 81 82 public static byte[] generatByteRowkey(String str) { 83 int i = Math.abs(str.hashCode() % PARTITIONS.length); 84 return Bytes.toBytes(StringUtils.join(PARTITIONS[i], "-", str)); 85 } 86 87 public static String getEventLogTableName(String event) { 88 return StringUtils.join("EVENT_LOG_", event); 89 } 90 91 public static String getGroupVarTableName() { 92 return "CUSTOM_VARIABLE_GROUP"; 93 } 94 95 96 public static String getActivityVarTableName() { 97 return "CUSTOM_VARIABLE_ACTIVITY"; 98 } 99 100 public static String getUserVarTableName() {101 return "CUSTOM_VARIABLE_USER";102 }103 104 public static String getUserInfoTableName() {105 return "USER_WIDE_PUB";106 }107 108 public static String getCardInfoTableName() {109 return "CARD_WIDE_PUB";110 }111 112 public static String getAcctInfoTableName() {113 return "ACCT_WIDE_PUB";114 }115 116 public static String getMetricTableName() {117 return "METRICS";118 }119 120 public static String getCustDefinitionTableName() {121 return "CUST_USER_DEFINITION";122 }123 124 public static String getCardDefinitionTableName() {125 return "CARD_USER_DEFINITION";126 }127 128 public static String getEventLogLbsHisName(){129 return "EVENT_LOG_LBS_HIS";130 }131 132 public static String getRankLogName(){133 return "RANK_LOG";134 }135 136 public static void main(String[] args) {137 String[] arr = generatPartitionSeed(101);138 for (int i = 0; i < arr.length; i++) {139 System.out.println(arr[i]);140 }141 }142 }

 

按指定分区数量创建预分区表  1 package com.spdbccc.edm.storm.common; 2  3 import org.apache.hadoop.conf.Configuration; 4 import org.apache.hadoop.hbase.HBaseConfiguration; 5 import org.apache.hadoop.hbase.HColumnDescriptor; 6 import org.apache.hadoop.hbase.HTableDescriptor; 7 import org.apache.hadoop.hbase.TableName; 8 import org.apache.hadoop.hbase.client.HBaseAdmin; 9 import org.apache.hadoop.hbase.io.compress.Compression;10 import org.apache.hadoop.hbase.io.encoding.DataBlockEncoding;11 import org.apache.hadoop.hbase.util.Bytes;12 13 public class HTableUtil {14 15     private static final int MAX_FILE_SIZE = 1024 * 1024 * 256;16 17     public static void main(String[] args) throws Exception {18         int limit = 100;19 20         createHBaseTable(HTableManager.getEventLogTableName("TEST"), limit);21 22         // createHBaseTable(HTableManager.getEventLogTableName("DH"), limit);23 24         // createHBaseTable(HTableManager.getActivityVarTableName(), limit);25 26         // createHBaseTable(HTableManager.getUserVarTableName(), limit);27 28     }29 30     private static HTableDescriptor getHTableDescriptor(String tableName) {31         HColumnDescriptor columnDescriptor = new HColumnDescriptor(HTableManager.DEFAULT_FAMILY_NAME);32         columnDescriptor.setCompressionType(Compression.Algorithm.SNAPPY);33         columnDescriptor.setCompactionCompressionType(Compression.Algorithm.SNAPPY);34         // columnDescriptor.setTimeToLive(60 * 60 * 24 * 365 * 1);35         columnDescriptor.setBlockCacheEnabled(true);36         columnDescriptor.setDataBlockEncoding(DataBlockEncoding.NONE);37 38         HTableDescriptor desc = new HTableDescriptor(TableName.valueOf(tableName));39         desc.setCompactionEnabled(true);40         desc.setMaxFileSize(MAX_FILE_SIZE);41         desc.addFamily(columnDescriptor);42         return desc;43     }44 45     /**46      * 创建表47      * 48      * @param tableName49      *            表名50      * @param partitionSeedLimit51      *            预分区数量,最大数量384452      * @throws Exception53      */54     public static void createHBaseTable(String tableName, int partitionSeedLimit) throws Exception {55         if (partitionSeedLimit > 3844 || partitionSeedLimit < 1) {56             throw new IllegalArgumentException("PartitionSeedLimit must be > 0 and < 3844.");57         }58         System.out.println("init HBase admin...");59         Configuration conf = HBaseConfiguration.create();60         HBaseAdmin admin = new HBaseAdmin(conf);61 62         if (admin.tableExists(tableName)) {63             if (!admin.isTableDisabled(tableName)) {64                 admin.disableTable(tableName);65             }66             admin.deleteTable(tableName);67             System.out.println(String.format("Table is exist, drop table %s successed.", tableName));68         }69 70         System.out.println(String.format("Creating HBase table %s, partition seed limit %d.", tableName, partitionSeedLimit));71         admin.createTable(getHTableDescriptor(tableName), Bytes.toByteArrays(HTableManager.generatPartitionSeed(partitionSeedLimit)));72         System.out.println(String.format("HBase table %s is created.", tableName));73         admin.close();74         System.out.println("==============================================");75     }76 77     // public static void main(String[] args) throws Exception {78     // String tableName = HTableManager.getEventLogTableName(args[0]);79     // int limit = Integer.parseInt(args[1]);80     // System.out.println("创建表: " + tableName);81     // createHBaseTable(tableName, limit);82     // System.out.println("创建成功: " + tableName);83     // }84 85 }

 

生成符合规则的rowkey 1 String key = "NE123456789";2 String messageKey = HTableManager.generatRowkey(key) + "-" + YZYT_msg_type;

 

转载于:https://www.cnblogs.com/riyueyuzhuzhu/p/5586802.html

你可能感兴趣的文章
流水作业调度
查看>>
涨姿势系列之——内核环境下内存映射函数
查看>>
遍历数组批量更新数组里元素的某一项属性
查看>>
github 收藏项目的方法
查看>>
九的余数
查看>>
北京师范大学第十五届ACM决赛-重现赛K Keep In Line ( 字符串模拟实现)
查看>>
(转)C# — WinForm 消息框的使用
查看>>
时间管理(转)
查看>>
Future FutrueTask Callable类源码说明以及原理使用
查看>>
flask 外键关系和多对多查询
查看>>
接收行数,打印平行四边形
查看>>
Linux上coredump调试:call stack栈顶函数地址为0 分析实战
查看>>
Educational Codeforces Round 11——C. Hard Process(YY)
查看>>
0054 Spring MVC的@Controller和@RequestMapping注解
查看>>
C#学习总结
查看>>
python字符串实战
查看>>
SQL学习笔记之B+树的几点总结
查看>>
力扣——字符的最短距离
查看>>
列表的操作
查看>>
8 通用输入输出口
查看>>