`

hbase分页的简单实现

阅读更多

参照博客:http://ronxin999.blog.163.com/blog/static/422179202013621111545534/

提供了两种解决思路,这里使用的是第一种

 

这里使用hbase的PageFilter实现简单的分页

 

分页过滤,通过设置pagesize参数可以返回每一页page的数量。

客户端需要记住上一次访问的row的key值。

 

 

package hbaseTest;  
  
import org.apache.hadoop.conf.Configuration;  
import org.apache.hadoop.hbase.HBaseConfiguration;  
import org.apache.hadoop.hbase.client.HTable;  
import org.apache.hadoop.hbase.client.Result;  
import org.apache.hadoop.hbase.client.ResultScanner;  
import org.apache.hadoop.hbase.client.Scan;  
import org.apache.hadoop.hbase.filter.Filter;  
import org.apache.hadoop.hbase.filter.PageFilter;  
import org.apache.hadoop.hbase.util.Bytes;  
  
import java.io.IOException;  
  
/** 
 * Hello world! 
 */  
public class PageFilterExample {  
    public static void main(String[] args) throws IOException {  
        Configuration config = HBaseConfiguration.create();  
        config.set("hbase.zookeeper.quorum", "QT-H-0038");  
  
        String tableName = "testTable";  
        String cfName = "colfam1";  
        final byte[] POSTFIX = new byte[] { 0x00 };  
        HTable table = new HTable(config, tableName);  
        Filter filter = new PageFilter(15);  
        byte[] lastRow = null;  
        int totalRows = 0;  
        while (true) {  
            Scan scan = new Scan();  
            scan.setFilter(filter);  
            if(lastRow != null){  
                //注意这里添加了POSTFIX操作,不然死循环了  
                byte[] startRow = Bytes.add(lastRow,POSTFIX);  
                scan.setStartRow(startRow);  
            }  
            ResultScanner scanner = table.getScanner(scan);  
            int localRows = 0;  
            Result result;  
            while((result = scanner.next()) != null){  
                System.out.println(localRows++ + ":" + result);  
                totalRows ++;  
                lastRow = result.getRow();  
            }  
            scanner.close();  
            if(localRows == 0) break;  
        }  
        System.out.println("total rows:" + totalRows);  
    }  
  
}  

 

因为hbase的row是字典序列排列的,因此上一次的lastrow需要添加额外的0表示新的开始。另外startKey的那一行是包含在scan里面的。

 

分享到:
评论

相关推荐

    hbase分页查询实现[归类].pdf

    HBase分页查询实现 HBase是一种基于分布式的NoSQL数据库,它提供了高效的数据存储和检索能力。然而,HBase本身不支持分页查询,...本文提供了一个简单的示例代码,旨在帮助开发者更好地理解HBase分页查询的实现机制。

    hbase 分页功能

    本篇将详细介绍HBase如何利用PageFilter实现分页,并探讨其工作原理及应用场景。 **一、PageFilter简介** PageFilter是HBase提供的一个内置过滤器,专门用于实现分页查询。它允许用户在查询时设定每页的数据量,...

    hbase-page:hbase 分页

    HBase本身并不直接支持像SQL那样的传统分页,但通过一些策略和工具,我们可以实现类似的效果。本文将深入探讨HBase中的分页实现及其相关知识点。 一、HBase的特性与数据模型 HBase是基于谷歌Bigtable设计的开源...

    springboot-hbase:以简单的订单业务示例hbse的使用&redis设计hbase查询分页

    这样,我们就实现了基于Spring Boot和HBase的订单管理,同时利用Redis实现了数据的缓存和分页查询。通过这种方式,我们能够高效地处理大量订单数据,提升系统性能。在实际应用中,还可以根据业务需求对订单实体进行...

    MyBatis分页插件-PageHelper

    4. **支持多种数据库**:除了主流的关系型数据库,PageHelper还支持分布式数据库如HBase等,提供了一种统一的分页处理方式。 5. **易于使用**:只需简单地在MyBatis的配置文件中添加PageHelper的配置,并在Mapper...

    spingboot+phoenix+mybatis+druid示例

    通过以上步骤,你就能够在SpringBoot项目中使用Phoenix操作HBase,结合MyBatis实现数据的分页查询,同时利用Druid作为高效的数据源连接池。这个示例项目为你提供了一个基础的框架,你可以在此基础上根据实际需求进行...

    金融行业数据库技术实践(下)百亿级数据如何实现秒级复杂查询V4.pdf

    V0.1实现了单索引和多数据类型的查询,V0.2引入了排序、分页和缓存优化,V0.3则进一步提升了性能,加入了布隆索引和服务器端的并行处理。 Pharos的架构由Client API、协调器、Server和协处理器组成。客户端定义查询...

    2017最新大数据架构师精英课程

    133_hbase的bulkload命令实现hbase集群之间数据的传输2 D6 d; F6 S8 x+ I/ I0 B0 @ 134_hive同hbase集成,统计hbase数据表信息% Q/ R! Z1 J3 J) k+ H! {6 D# M 135_使用TableInputFormat进行MR编程! m& C6 B/ v6 N" ...

    大型分布式电商实践

    HBase本质上是存储粗粒度结构化数据的稀疏大表,其架构允许通过简单增加节点来实现系统的线性扩展。HBase运行在HDFS(Hadoop Distributed File System)之上,可以利用廉价的PC Server搭建起大规模的结构化存储集群...

    NoSQL数据库探讨之一-为什么要用非关系数据库?.pdf

    大多数web应用主要进行单表主键查询和简单条件分页查询,这使得NoSQL数据库的查询更为简单且高效。 NoSQL数据库的种类繁多,如Redis(内存数据结构存储)、Tokyo Cabinet(磁盘存储的键值数据库)、Cassandra...

    百亿级数据的秒级复杂查询技术设计.pptx

    V0.1实现了单索引和多条件查询,V0.2增加了排序、分页和缓存优化,而V0.3引入了布隆索引和CBO优化,以应对更复杂的查询条件组合。 【组件构成】 Pharos系统由Client API、协调器、Server和协处理器组成。Client ...

    基于Django Restframework的异常检测系统,分析服务为Spark SQL和Spark Mllib.zip

    这个框架使得创建RESTful API变得更加简单,支持序列化、权限管理、分页、过滤等功能,非常适合构建后端服务,特别是需要对外提供API的项目。 【异常检测】 异常检测是一种数据分析技术,用于识别数据集中不寻常或...

    毕业设计美食推荐Java爬虫.zip

    3. **数据存储模块**:抓取到的数据需要存储以便后续处理,常见的存储方式有文件系统、数据库(如MySQL、MongoDB)或NoSQL存储(如HBase)。在设计时要考虑数据结构、索引优化以及扩展性。 4. **任务调度与并发控制...

    NoSQL笔记.doc

    这种简化使得NoSQL数据库在处理简单查询、主键查找和条件分页时更加快速和高效。 NoSQL数据库种类繁多,包括Redis、Tokyo Cabinet、Cassandra、MongoDB等,它们使用不同的编程语言实现,各有特点。例如,Redis以其...

    spring-data的学习笔记

    1. **简单条件查询**:可以通过定义方法名称来进行简单的条件查询。例如,要查询一个用户的所有记录,可以定义方法`findAll()`。更复杂的条件查询,如`findByLastNameAndFirstName(String lastName, String ...

    java爬取天涯社区

    在本项目"java爬取天涯社区"中,我们将探讨如何使用Java语言来编写一个简单的网络爬虫,以抓取天涯社区中的帖子数据。 首先,我们需要了解Java爬虫的基本构建模块。这通常包括以下几个部分: 1. **HTTP请求库**:...

    典型数据库架构设计及应用.pdf

    因此,可以采用不同的数据库策略:前台采用哈希分片,后台使用分页和排序功能,甚至结合NoSQL数据库如Hbase或搜索引擎如ES,以满足不同场景的需求。 总的来说,数据库架构设计是一个不断演进的过程,需要根据业务...

    Spring-data-jpa 学习笔记.docx

    Spring Data 支持的 NoSQL 存储包括但不限于 MongoDB(文档数据库)、Neo4j(图形数据库)、Redis(键/值存储)以及 Hbase(列族数据库)。而对于关系型数据库,则支持 JDBC 和 JPA 技术。 Spring Data JPA 专注于...

    吐血推荐大数据高频面试题.pdf

    - Flume在数据采集上更为简单直接,适合日志数据的快速收集和传输。 - Kafka在数据可靠性、性能、可伸缩性方面更优,且支持数据的多消费者处理。 ### Kafka为什么选择 Kafka之所以被广泛选择,是因为它拥有以下几个...

Global site tag (gtag.js) - Google Analytics