Java代码通过API操作HBase的最佳实践
更新时间:2024-01-22 09:48:01 阅读量: 教育文库 文档下载
Java代码通过API操作HBase的最佳实践
HBase提供了丰富的API。这使得用Java连接HBase非常方便。
有时候大家会使用HTable table=new HTable(config,tablename);的方式来实例化一个HTable对象,实际上这并不是最好的实例化HTable的办法。最好的办法是使用HTablePool,并且每个线程都使用独立的HTable(参见《HBase The Definitive Guide》 4.4 HtablePool 和3.1 客户端API 概述)。因为HTable实例的创建非常耗时,需要扫描.META表确认表是否存在,是否可用等,还需要做其他的一些操作,所以,最好在系统启动的时候创建实例,如果需要多个HTable,考虑使用HTablePool。 比如我在webservice中,需要对HTable进行查询,并将数据返回,我是这么做的: 可以在提供服务的类的构造函数里完成HTablePool的初始化,弃用下面的方法。
先在静态代码块中把系统中需要用到的表都获取一遍,获取完之后立即关闭该表,以期增加真正的服务的代码中,第一次实例化HTable对象的效率。
//这是我对外提供服务的类 public class HBaseQu {
// SignHBase.getConfiguration()是从配置文件中获取 //org.apache.hadoop.conf.Configuration的一个对象 // 定义一个全局的HTablePool
public static HTablePool hTablePool = new HTablePool( SignHBase.getConfiguration(), Integer.MAX_VALUE);
// 初始化所用到的HTablePool,从pool中get一个需要用到的表,get完毕,立即关闭,
// 以后每增加一个接口,如果需要用到一个新表的话,就在此处增加一次获取表,然后关闭它的代码。 static {
HTable table = null;
//从池里获取一个表,然后关闭它(类似于充血) try { table = (HTable) hTablePool.getTable(tableName); if (null != table) {
table.close(); } }
catch (IOException e) {
e.printStackTrace(); }
//获取另外一个表
try {
table = (HTable) hTablePool.getTable(tableName2); if (null != table) {
table.close(); } }
catch (IOException e) {
e.printStackTrace(); } } }
在真正的服务的代码中,直接使用pool.getTable(tableName)即可快速实例化该表。如下所示:
HTable table = null;//定义HTable
ResultScanner rs = null;//定义接收结果的ResultScanner对象 try {
//实例化HTable对象
table = (HTable) HBaseQu.hTablePool.getTable(tablename); Scan s = new Scan();//实例化Scan对象
s.setFilter(new PrefixFilter(rowPrifix.getBytes()));//添加过滤器
s.addColumn(Bytes.toBytes(family), Bytes.toBytes(qualifier));
rs = table.getScanner(s);//获取结果 for (Result r : rs) {//循环处理行
KeyValue[] kv = r.raw();
for (int i = 0; i < kv.length; i++) {
value.add(new String(kv[i].getRow(), \\
+ new String(kv[i].getFamily()) + \ + new String(kv[i].getQualifier()) + \
+ new String(kv[i].getValue()));
} } }
catch (Exception e) {
e.printStackTrace(); return null; }
finally {
//关闭打开的资源 if (null != rs) {
rs.close(); } try {
if (null != table) {
table.close(); } }
catch (IOException e) {
e.printStackTrace(); } }
正在阅读:
人教版语文五年级上册第八单元测试卷(1)06-10
六年级阅读理解练习题04-02
2020年装卸运输合同合集大全07-23
读狼图腾有感06-17
我喜爱的小兔子作文450字06-20
新人教版二年级数学上册期末复习计划11-08
小升初英语语法练习之名词07-27
人教部编版语文七年级下册第8课《木兰诗》知识点梳理08-20
扬州大学自动控制原理课程设计报告04-07
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 实践
- 最佳
- 通过
- 代码
- 操作
- HBase
- Java
- API
- 水污染控制工程各章习题
- 轧钢厂设备动力科维修钳工岗位职位说明书
- 2014年计算机基础知识试题及答案
- 滁州市校本研修活动记录册(空)
- 五番礼拜拜数
- 修改病句
- 中西哲学家生死观漫谈
- 首师大古代文学考研真题之中国语言文学(2007)
- 2020版高考数学复习专题9平面解析几何第73练抛物线文
- 高中物理变力做功的方法及例题
- 人教版小学语文一至六年级日积月累汇总
- 安阳市2007年城市房屋拆迁货币补偿基准价
- 综合实践活动教案二年级是上册
- 2016年执法资格考试模拟试卷
- 2012北京市丰台区2012年高三二模(理科)数学试题及答案
- 部编西师版二年级上册语文全册教案
- 地源热泵两种换热方式之比较
- 变速器换挡叉说明书
- 交通管理与控制实验1-3
- 外语系教工党支部工作职责(书记、组织、宣传)