在组拼hbase rowkey时,为了防止热点,rowkey可以使用 md5方式或者hash方式,
这里介绍下 hash方式:
0 work_regionmax_student=10000 1 hashfun (stu.class_id, ${work_regionmax_student}) 2 hashfun : hashfun(string, int) 获取string的hashcode,根据int取余并补全位数 3 自定义函数中的写法: import org.apache.hadoop.hive.ql.exec.UDF; /** * Created by zm on 16/6/30. */ public class CreateHashId extends UDF { public String evaluate(String value, long number){ if (value == null || value.toString().equals("") || number < 1 ){ return null; } else { long result = Math.abs(value.hashCode()%number); System.out.println("result: " + result ); int formatLength = String.valueOf(number-1).length(); System.out.println("formatLength: " + formatLength ); String newString = String.format("%0" + formatLength + "d", result); // 用十进制0来填补 return newString; } } //test public static void main(String [] args) { CreateHashId testid = new CreateHashId(); //System.out.println(testid.evaluate("010f5ae14d604b729456009a4c806bc0", 10000)); /** * 结果: result: 3754 formatLength: 4 3754 */ System.out.println(testid.evaluate("01110158d9f041f6a9c75520f3e91b53", 10000)); /** 结果 result: 27 formatLength: 4 如果result的值是4位,那么 String.format("%0" + formatLength + "d", result);的操作没用 ,否则 result前面不够4位就用0填充 0027 */ /*String test = "tmp_dm_dm_evaluation_school_grade_teacher_kp_rank_distribution_teacher_kp_mastered_count_incountyrank_allsubjectlist_20170416_semester"; System.out.println(test.length());*/ } }
这里介绍下md5的使用:
import com.google.common.base.Charsets; import com.google.common.hash.Hashing; import org.apache.hadoop.hive.ql.exec.UDF; /** * 转换md5 * Created by pc on 2016/12/23. */ public class MD5 extends UDF{ public String evaluate (String userId){ return Hashing.md5().hashString(userId, Charsets.UTF_16LE).toString(); } public static void main(String[] args) { String str1="{\"actId\":\"1600005\",\"classId\":\"e291a2698c0a4c60a1af41d7dc40fe50\",\"className\":\"四年级(1)班\",\"countyId\":\"370725\",\"countyName\":\"昌乐县\",\"gradeId\":\"4\",\"originCode\":\"2\",\"role\":\"STUDENT\",\"schoolId\":\"460958\",\"schoolName\":\"昌乐行知双语实验学校\",\"time\":1511059347806,\"userIcon\":\"de28f0bde3800375c3cf23fc7d03d0bc\",\"userId\":\"38085844\",\"userIp\":\"111.37.45.234\",\"userName\":\"孙豪章\",\"data\":{\"workMode\":2,\"publishClassType\":1,\"subjectName\":\"昌乐行知双语实验学校\",\"questionId\":\"tch_a285a3cb93bb4695b018b4e58e6a4ee2_v1_WT_3\",\"subjectId\":\"110\",\"workId\":\"172630abe0a949018b00fad7d80673cc\",\"publishClassId\":\"e291a2698c0a4c60a1af41d7dc40fe50\",\"unitId\":\"110002001065100001001\"}}"; String str2="{\"actId\":\"1600005\",\"classId\":\"e291a2698c0a4c60a1af41d7dc40fe50\",\"className\":\"四年级(1)班\",\"countyId\":\"370725\",\"countyName\":\"昌乐县\",\"gradeId\":\"4\",\"originCode\":\"2\",\"role\":\"STUDENT\",\"schoolId\":\"460958\",\"schoolName\":\"昌乐行知双语实验学校\",\"time\":1511059347806,\"userIcon\":\"de28f0bde3800375c3cf23fc7d03d0bc\",\"userId\":\"38085844\",\"userIp\":\"111.37.45.234\",\"userName\":\"孙豪章\",\"data\":{\"workMode\":2,\"publishClassType\":1,\"subjectName\":\"昌乐行知双语实验学校\",\"questionId\":\"tch_a285a3cb93bb4695b018b4e58e6a4ee2_v1_WT_3\",\"subjectId\":\"110\",\"workId\":\"172630abe0a949018b00fad7d80673cc\",\"publishClassId\":\"e291a2698c0a4c60a1af41d7dc40fe50\",\"unitId\":\"110002001065100001001\"}}"; Hashing.md5().hashString(str1, Charsets.UTF_16LE).toString(); System.out.println( Hashing.md5().hashString(str1, Charsets.UTF_16LE).toString()+":"+ Hashing.md5().hashString(str2, Charsets.UTF_16LE).toString()); } }
相关推荐
hbase的Rowkey设计⽅案 1.1 hbase的概述 的概述 HBase由于其存储和读写的⾼性能,在OLAP即时分析中越来越发挥重要的作⽤。作为Nosql数据库的⼀员,HBase查询只能通过其 Rowkey来查询(Rowkey⽤来表⽰唯⼀⼀⾏记录),...
阿里云 吴阳平(明惠) 阿里云HBase业务架构师 主要章节:
Spark存储数据到HBase实现RowKey完全散列-多进程多线程间Random完全随机,完美解决热点问题
该文档是介绍hbase的rowkey设计与hbase的协处理器运用,与大家分享!
本发明涉及涉及在hbase上进行海量GIS矢量数据空间索引编码及建立的方法,更特定言之,本发明涉及对点、线、面二维矢量数据映射到一维的字符串型rowkey索引,使之能够用hbase存储海量矢量数据,提供高性能空间查询...
HBase-RowKey与索引设计(高清) HBase-RowKey与索引设计(高清)HBase-RowKey与索引设计(高清)
大数据性能调优之HBase的RowKey设计.docx
用户历史订单列表查询rowkey设计技巧 最左前缀原则
HBase的模式Schema设计的一些概念和原则 5 1)模式的创建与更新 5 2)列族的数量 6 3)行键设计RowKey 6 5. HBase的拓扑结构是什么? 7 1)拓扑结构 7 2)HBase与ZooKeeper的关系是什么? 7 3)HBase的内部结构管理...
HBase中,表会被划分为1...n个Region,被托管在RegionServer中。Region二个重要的属性:StartKey与EndKey表示这个Region维护的rowKey范围,当我们要读/写数据时,如果rowKey落在某个start-endkey范围内,那么就会定位...
HBASE的使用跟业务逻辑有很强的关联性,就像本文里提到的例子使用ElasticSearch更合适。...本文主要内容是通过合理hbase行键(rowkey)设计实现快速的多条件查询,所采用的方法将所有要用于查询中的列经过一些处理后
2)、RowKey散列原则:如果RowKey是按时间戳的方式递增,不要将时间放在二进制码的前面,建议将RowKey的高位作为散列字段,由程序循环生成,低位放时间
HBASE调优 HBASE技术框架与存储模型 v HBASE调优 v 硬件 v 系统参数 v java v 表的设计 v 客户端 v 服务器端
2-2+HBase-RowKey+与索引设计
hbase原理和设计,包括二级索引,rowkey设计,常见的坑.
│ Hbase表中rowkey及列簇的设计 │ Hbase表设计-微博案例的表设计 │ Hbase表设计-微博案例的业务实现 │ Hbase列簇属性的介绍 │ Hbase性能优化-GC调优 │ Hbase性能优化-内存管理 │ Hbase性能优化-flush、...
│ Day15[Hbase 基本使用及存储设计].pdf │ ├─02_视频 │ Day1501_Hbase的介绍及其发展.mp4 │ Day1502_Hbase中的特殊概念.mp4 │ Day1503_Hbase与MYSQL的存储比较.mp4 │ Day1504_Hbase部署环境准备.mp4 │ Day...
HBase – Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群。 HBase是Google Bigtable的开源实现,类似Google Bigtable...