在组拼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()); } }
相关推荐
解决方法是尽量以 hash 或者 md5 等开头来组织 rowkey,使每段时间的 rowkey 访问都是均匀的。 3. 数据分布不均问题:HBase 的数据分布不均匀,导致某些 RegionServer 的请求数量非常高,而其他的请求数量非常低。...
在HBase性能优化的过程中,表设计和RowKey的设计是至关重要的。预分区是表设计的一个重要环节,目的是避免因表的自动split导致的资源消耗和性能影响。预分区可以根据业务需求预先设定rowkey的范围,比如在例子中,...
二是采用分桶策略(Bucketing),通过计算rowkey的MD5值对bucket数量取模,将数据分布到不同的桶中。这种方式保证了数据在桶内的有序性,但在桶间无序,同样在进行范围查询时需要并发扫描多个桶并进行客户端的merge ...
针对大数据K-近邻(K-nearest neighbors,K-NN)计算复杂度高的问题,提出一种基于HBase和Sim Hash的大数据K-近邻分类算法。利用Sim Hash算法将大数据集从原空间映射到Hamming空间,得到哈希签名值集合;将样例的行键与值...
此外,还设计了GPS.GATHERPOINTS表,用于存储聚集点数据,其ROWKEY由时间戳和GeoHash的前6位字符的反转组成,方便对聚集点进行索引和查询。 ### 总结 HBase在大搜车金融业务中的应用表明,该数据库系统非常适合处理...
HBase在存储结构设计上支持行键(rowkey)的设计,这对于提高查询效率非常关键。例如,在GPS数据表中,可以通过设备ID和时间戳来设计行键,实现数据的有序存储,这对于查询特定时间或特定设备的数据十分有用。 最后,...
- 模型训练时,先在5分钟内从HBase读取所有城市数据,然后在25分钟内完成模型训练,RowKey设计为盐分+城市ID+类型+时间戳,方便高效访问和更新。 - 训练结果每隔一段时间持久化到HDFS,以便新模型的验证和测试。 总...
- 实时查询订单状态,使用逆序的订单ID和时间戳作为Rowkey,保证写入效率。 - 客服系统的历史订单查询,Redis缓存最近的订单,Redis不可用时,直接查询HBase。 - 离线分析订单状态,满足大量事件的读取和5s内的...
41. **HBase RowKey设计**:设计合理的RowKey可实现数据均匀分布,减少热点。 42. **TCP三次握手与四次挥手**:描述ACK、FIN、序号的作用及状态转换。 43. **垃圾收集**:理解不同GC算法,如Minor GC、Major GC、...
解决方法包括合理设计RowKey,使用Zone Replication,或者动态调整Region大小。 12. **Flink 恢复机制**:当Flink任务挂掉时,基于检查点的恢复流程会从最近的检查点重新启动任务,确保状态一致性。 13. **SQL ...
在技术架构的使用和场景分析中,NAS适合快速部署的业务,DFS提供了接口方便读写,特别是支持POSIX接口的DFS。对象存储通常不支持POSIX,而是通过HTTP等7层接口进行操作,适合跨IDC或全球的数据存储,提供高可靠性但...
- Hbase的优化涉及预分配region、rowkey设计和底层配置参数调整。 对于分布式文件系统,例如HDFS,要注意元数据管理、存储节点性能、存储网络性能和客户端支持。这包括元数据服务器的复制结构、硬件配置、处理线程...
- **主要内容**:为了使数据均匀分布,需合理设计rowkey,考虑数据访问模式和分布策略。 - **考察点**:NoSQL数据库基础知识、HBase使用经验。 #### 分布式知识 - **主要内容**:包括但不限于分布式事务处理、一致...