HBase应用开发回顾与总结系列之三:RowKey行键生成器工具
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了HBase应用开发回顾与总结系列之三:RowKey行键生成器工具,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2440字,纯文字阅读大概需要4分钟。
内容图文
所谓RowKey行键生成器,是指通过软件工具制定行键生成策略,并可将策略信息保存成本地策略文件,待需要时再将本地策略文件序列化成行键生成策略对象,传入数据行信息后可自动生成RowKey行键。
那么,为什么要设计这个行键生成器呢?最初的时候,我们有一个需求,要把Oracle中的若干大表数据导入到HBase中,那么这里就出现了一个问题:那么多表,每个表的RowKey生成规则都是不一样的,难道我们要为每个表都设计一个行键生成方法吗?!
当然不可能,我们必须做一些事半功倍或者一劳永逸的事情来解决这个问题,所以我们就想到可以设计一个行键生成器工具,这样开发人员就可以手动制订生成一些策略文件,并可把这些策略文件打成jar包文件进行分发。下图为其效果图。
下面笔者将详细介绍下设计思路。
第一,HBase中的行键信息,往往是由多个数据信息组合而成,而且大部分情况下都是基于已有的关系数据库表的列字段信息。举个例子,现在我们要把PUBLISH_DATA_INFO(发布数据信息表)中的数据信息导入到HBase表中,行键由“PUBLISH_TIME”和“DATA_TYPE”组成,那么,现在我们就首先确定了行键信息的数据来源。
第二,我们再重申下HBase行键的几个生成原则:定长、唯一性等。那么,我们就必须对组成行键的数据进行格式化处理,常规的格式化处理方式有以下几种:去除空格、替换特殊字符、前补齐、后补齐、字符颠倒等等,所用的java技术也不外乎那几个方法:trim、replace、substring等等。当然,对于某些特殊情况,你也可以采用正则表达式进行处理。笔者将这些格式化处理统称为配置策略。
第三,HBase行键生成策略信息制定后,需要将其持久化保存,以便其他人员和系统使用。保存方式有多种,譬如,将其保存到Oracle或者Mysql数据库表中,可以确保唯一性,而且可以通过网络供多个用户和系统共用,是最佳的保存方式。也可以将其序列化成本地文件(xml或者json文件等),笔者现在设计的这个版本,就是将行键生成策略信息序列化成json文件保存到本地。如下表所示:
[{"DATA_TYPE":"DATA_TYPE","PUBLISH_TIME":"PUBLISH_TIME"},{"columnName":"PUBLISH_TIME","length":14,"numberStep":1,"prefixChar":"","prefixNumber":0,"replaceChar":"","replaceSourceChar":"- :","splitChar":".","startNumber":1,"suffixChar":"0","suffixNumber":0,"value":"2015-12-26 12:24:00"},{"columnName":"DATA_TYPE","length":4,"numberStep":1,"prefixChar":"","prefixNumber":0,"replaceChar":"","replaceSourceChar":"","splitChar":"","startNumber":1,"suffixChar":"0","suffixNumber":0,"value":"D1"}]
第四,该怎么使用这些行键生成策略呢?在系统启动的时候,通过接口方法加载这些行键生成策略信息(文件),将其加载到内存中,然后组织与行键相关的字段信息集合,并将其传递到指定的接口方法中,最终生成行键。示例代码如下:
// 加载行键策略本地文件 String policyFilePath = "D:\\PMS_EQUIP_INFO.policy"; RowKeyPolicy rowKeyPolicy = RowKeyPolicy.openRowKeyGeneratorPolicyFile(policyFilePath); //构建测试用的数据行 Map<String,Object> row = new HashMap<String,Object>(); row.put("PUBLISH_TIME", "2015-08-12 16:35:00"); row.put("DATA_TYPE", "D01"); String rowKey = rowKeyPolicy.getRowKey(row, false); LogInfoUtil.printLog("RowKey=" + rowKey); row.put("PUBLISH_TIME", "2015-09-12 16:35:00"); row.put("DATA_TYPE", "D02"); rowKey = rowKeyPolicy.getRowKey(row, false); LogInfoUtil.printLog("RowKey=" + rowKey); //打印日志信息如下 **********RowKey=20150812163500.D010 **********RowKey=20150912163500.D020
第五,下面是笔者开发时的工程文件,代码还没有来得及优化,有兴趣的朋友,可以下载下来看看。附工程结构图:
附件:
hnepri-hadoop-hbase-rowkey工程代码
作者:商兵兵
单位:河南省电力科学研究院智能电网所
QQ:52190634
原文:http://www.cnblogs.com/shangbingbing/p/5069443.html
内容总结
以上是互联网集市为您收集整理的HBase应用开发回顾与总结系列之三:RowKey行键生成器工具全部内容,希望文章能够帮你解决HBase应用开发回顾与总结系列之三:RowKey行键生成器工具所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。