文档章节

Hbase分页

sameLuo
 sameLuo
发布于 2014/11/25 16:48
字数 528
阅读 349
收藏 7
点赞 0
评论 0

    和传统数据库不同,Hbase的分页非常的困难(就我的愚见,可以说hbase无法真正分页),在参考了网上一些代码后,写了一段hbase分页代码。其原理主要是,先查询出rowKey,对rowKey进行分页后,再通过分页后的rowKey进行数据查询。

public class HbaseHelp {

	private static Configuration conf = null; 
	/**
	 * hbase的连接
	 * 用于替代HtablePool
	 * 用此类创建Htable会提高效率
	 */
	private static HConnection conn = null;
	/**  
	 * 初始化配置  
	 */  
	static {  
	    conf = HBaseConfiguration.create();  
	    conf.set("hbase.zookeeper.quorum", PropertiesUtil.getPropertyString("hbase.zookeepe                r.quorum"));
	    conf.set("hbase.zookeeper.property.clientPort", PropertiesUtil.getPropertyString("h                base.zookeeper.property.clientPort"));
	    conf.set("hbase.zookeeper.master", "192.168.1.12:60000");
	    try {
			conn = HConnectionManager.createConnection(conf);
		} catch (IOException e) {
			System.out.println("创建连接失败");
			e.printStackTrace();
		}
	}  
	 private static HTableInterface getTable(String tableName) throws IOException{
		 return conn.getTable( tableName );
	
	 }
	 	 private static Scan getScan(String StartRow,String endRow){
		 
		Scan scan =  new Scan();
		if( StartRow!=null )
		    scan.setStartRow( toBytes(StartRow) );
		if( endRow!=null )
		    scan.setStopRow( toBytes(endRow) );
		//设置缓存数量
		scan.setCaching(1000);
		//开启缓存
		scan.setCacheBlocks(true);
		return scan;
	 }
	 private static Map<String,String> resultHandle(Result rs){
		Map<String,String> result = new HashMap<String, String>();
		Cell[] cells = rs.rawCells();
		result = new HashMap<String, String>();
		boolean isFirst = true;
		for( Cell cell:cells ){
			if( isFirst ){
				result.put( "rowKey" , toString( CellUtil.cloneRow(cell) ) );
				result.put("timeStamp", cell.getTimestamp()+"");
				isFirst = false;
			}
			result.put(toString( CellUtil.cloneQualifier(cell) ), 
					
					toString( CellUtil.cloneValue(cell) ));
		}
		return result;
	}
		private static void closeTable(HTableInterface table){
		if( table==null )
			return;
		try {
			table.close();
		} catch (Exception e) {
			System.out.println("关闭表"+table.getName()+"失败!!!!!!");
			e.printStackTrace();
		}
	}
	public static  List< Map<String,String> > scanByPage(String tableName,String StartRow,S            tring endRow,Integer currentPae,Integer pageSize,Filter ...filters){
		 
		 HTableInterface table = null;
		 List<byte[]> rowKeyList = new LinkedList<byte[]>();
		 List< Map<String,String> > result = new LinkedList<Map<String,String>>();
		 try {
			 //格式化输入信息
			 if( currentPae == null || currentPae == 0 )
				 currentPae = 1;
			 if( pageSize == null || pageSize == 0 )
				 pageSize = 100;
			 //计算分页的数据范围
			 int firstCount = (currentPae - 1) * pageSize; 
			 int maxCount = firstCount + pageSize - 1; 
			 table = getTable(tableName);
			 Scan scan = getScan(StartRow, endRow);
			 PageFilter filter = new PageFilter(maxCount+1);
			 scan.setFilter(filter);
			 scan.setMaxVersions();
			 if( filters!=null ){
				 for( int i=0;i<filters.length;i++ ){
					 scan.setFilter(filters[i]);
				 }
			 }
			 //TODO 只取rowkey
			 ResultScanner scanner = table.getScanner(scan);
			 int i=0;
			 //获取分页数据的rowKey
			 for( Result rs:scanner ){
				 byte[] rowKey = null;
				 if( i>=firstCount && i<=maxCount ){
					 rowKey = rs.getRow();
					 rowKeyList.add(rowKey);
				 }
				 i++;
			 }
			 //通过行健集合构建查询集合
			 List<Get> getList = getGetList(rowKeyList);
			 Result[] rss = table.get(getList);
			 Map<String, String> rsMap = null;
			 for( Result rs:rss ){
				 rsMap = resultHandle(rs);
				 result.add(rsMap);
			 }
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			closeTable(table);
		}
		 return result;
		
	 }
	 
}


© 著作权归作者所有

共有 人打赏支持
sameLuo
粉丝 5
博文 17
码字总数 18151
作品 0
成都
程序员
中国HBase技术社区第一届meetup入群邀请

各位报名成功的HBase爱好者,请扫描以下微信二维码,加入本次HBase meetup消息通知群,后续会议相关通知,会在群里进行公布,请各位及时关注。 会议地址:北京望京阿里中心B座(各位6号到园区...

wenzi0563
05/31
0
0
hbase单机模式的安装及启动

从apache官网上下载hbase的稳定版本:http://mirror.bit.edu.cn/apache/hbase/stable/hbase-1.1.2-bin.tar.gz 解压到本机上的任何一个目录,在我的电脑上是/home/jason/hbase:tar xvfz hbas...

z_jordon
2015/11/04
0
0
Hive学习总结之五:HBase和Hive的集成

Hive和Hbase有各自不同的特征:hive是高延迟、结构化和面向分析的,hbase是低延迟、非结构化和面向编程的。Hive数据仓库在hadoop上是高延迟的。Hive集成Hbase就是为了使用hbase的一些特性。如...

酷帅CoolBash
2013/03/10
0
0
中国HBase技术社区第一届Meetup资料大合集

2018年6月6号,由中国HBase技术社区组织,阿里云主办的中国第一次HBase Meetup在北京望京阿里中心举行,来自阿里、小米、滴滴、360等公司的各位HBase的PMC、committer共聚一堂,共同探讨HBa...

wenzi0563
06/14
0
0
Hbase 1.0.1单机版安装

1.首先从官网上下载http://mirror.bit.edu.cn/apache/hbase/hbase-1.0.1/hbase-1.0.1-bin.tar.gz 安装包 2.解压缩到安装目录,tar -xvf hbase-1.0.1-bin.tar.gz 3.修改conf/hbase-site.xml <......

木偶
2015/05/11
0
0
hadoop2.6完全分布式安装HBase1.1

本文出自:http://wuyudong.com/archives/119 对于全分布式的HBase安装,需要通过hbase-site.xml文档来配置本机的HBase特性,由于各个HBase之间通过zookeeper来进行通信,因此需要维护一组z...

boonya
2015/05/26
0
0
(转载)Hbase -- HBase集群配置安装

HBase集群配置安装 hadoop-0.20.2 hbase-0.20.3 zookeeper-3.3.0 1: tar zxvf hbase-0.20.3.tar.gz 2: 修改 ./hbase-0.20.3/conf/hbase-env.sh export JAVA_HOME=/usr/local/java/ 3: 创建文......

遵从本心
2013/08/14
0
0
hbase 数据库简介安装与常用命令的使用

一:hbase 简介与架构功能 二:hbase 安装与配置 三:hbase 常见shell 命令操作 一:hbase 简介与架构功能 1.1 为什么要使用hbase 数据库 1.2 hbase 简介: 1.3 HBase与Hadoop的对比 1.4 HB...

flyfish225
04/12
0
0
一文让您全面了解清楚HBase数据库的所有知识点,值得收藏!

欢迎关注大数据和人工智能技术文章发布的微信公众号:清研学堂,在这里你可以学到夜白(作者笔名)精心整理的笔记,让我们每天进步一点点,让优秀成为一种习惯! 一、HBase基本概念:列式数据...

李金泽
03/04
0
0
普及HBase,阿里云HBase团队在行动

一、HBase的历史由来 HBase是一个开源的非关系型分布式数据库(NoSQL),基于谷歌的BigTable建模,是一个高可靠性、高性能、高伸缩的分布式存储系统,使用HBase技术可在廉价PC Server上搭建起...

所在jason
05/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

SpringBoot | 第十章:Swagger2的集成和使用

前言 前一章节介绍了mybatisPlus的集成和简单使用,本章节开始接着上一章节的用户表,进行Swagger2的集成。现在都奉行前后端分离开发和微服务大行其道,分微服务及前后端分离后,前后端开发的...

oKong
今天
9
0
Python 最小二乘法 拟合 二次曲线

Python 二次拟合 随机生成数据,并且加上噪声干扰 构造需要拟合的函数形式,使用最小二乘法进行拟合 输出拟合后的参数 将拟合后的函数与原始数据绘图后进行对比 import numpy as npimport...

阿豪boy
今天
4
0
云拿 无人便利店

附近(上海市-航南路)开了家无人便利店.特意进去体验了一下.下面把自己看到的跟大家分享下. 经得现场工作人员同意后拍了几张照片.从外面看是这样.店门口的指导里强调:不要一次扫码多个人进入....

周翔
昨天
1
0
Java设计模式学习之工厂模式

在Java(或者叫做面向对象语言)的世界中,工厂模式被广泛应用于项目中,也许你并没有听说过,不过也许你已经在使用了。 简单来说,工厂模式的出现源于增加程序序的可扩展性,降低耦合度。之...

路小磊
昨天
176
1
npm profile 新功能介绍

转载地址 npm profile 新功能介绍 npm新版本新推来一个功能,npm profile,这个可以更改自己简介信息的命令,以后可以不用去登录网站来修改自己的简介了 具体的这个功能的支持大概是在6这个版...

durban
昨天
1
0
Serial2Ethernet Bi-redirection

Serial Tool Serial Tool is a utility for developing serial communications, custom protocols or device testing. You can set up bytes to send accordingly to your protocol and save......

zungyiu
昨天
1
0
python里求解物理学上的双弹簧质能系统

物理的模型如下: 在这个系统里有两个物体,它们的质量分别是m1和m2,被两个弹簧连接在一起,伸缩系统为k1和k2,左端固定。假定没有外力时,两个弹簧的长度为L1和L2。 由于两物体有重力,那么...

wangxuwei
昨天
0
0
apolloxlua 介绍

##项目介绍 apolloxlua 目前支持javascript到lua的翻译。可以在openresty和luajit里使用。这个工具分为两种模式, 一种是web模式,可以通过网页使用。另外一种是tool模式, 通常作为大规模翻...

钟元OSS
昨天
2
0
Mybatis入门

简介: 定义:Mybatis是一个支持普通SQL查询、存储过程和高级映射的持久层框架。 途径:MyBatis通过XML文件或者注解的形式配置映射,实现数据库查询。 特性:动态SQL语句。 文件结构:Mybat...

霍淇滨
昨天
2
0
开发技术瓶颈期,如何突破

前言 读书、学习的那些事情,以前我也陆续叨叨了不少,但总觉得 “学习方法” 就是一个永远在路上的话题。个人的能力、经验积累与习惯方法不尽相同,而且一篇文章甚至一本书都很难将学习方法...

_小迷糊
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部