`
lookqlp
  • 浏览: 346884 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

HBase数据查询之Coprocessor

阅读更多
二级索引方案   

协处理器的概念、作用和类型不介绍,可以参看:http://www.cnblogs.com/ventlam/archive/2012/10/30/2747024.html,官方blog:https://blogs.apache.org/hbase/entry/coprocessor_introduction

    协处理器其中的一个作用是使用Observer创建二级索引。先举个实际例子:

    我们要查询指定店铺指定客户购买的订单,首先有一张订单详情表,它以被处理后的订单id作为rowkey;其次有一张以客户nick为rowkey的索引表,结构如下:

rowkey family
dp_id+buy_nick1 tid1:null tid2:null ...
dp_id+buy_nick2 tid3:null
...
该表可以通过Coprocessor来构建,实例代码:

public class TestCoprocessor extends BaseRegionObserver {
    @Override
     public void prePut(final ObserverContext<RegionCoprocessorEnvironment> e,
     final Put put, final WALEdit edit, final boolean writeToWAL)
     throws IOException {
         Configuration conf = new Configuration();
         HTable table = new HTable(conf, "index_table");
         List<KeyValue> kv = put.get("data".getBytes(), "name".getBytes());
         Iterator<KeyValue> kvItor = kv.iterator();
         while (kvItor.hasNext()) {
             KeyValue tmp = kvItor.next();
             Put indexPut = new Put(tmp.getValue());
             indexPut.add("index".getBytes(), tmp.getRow(), Bytes.toBytes(System.currentTimeMillis()));
             table.put(indexPut);
         }
         table.close();
     }
}
即继承BaseRegionObserver类,实现prePut方法,在插入订单详情表之前,向索引表插入索引数据。



索引表的使用

先在索引表get索引表,获取tids,然后根据tids查询订单详情表。

当有多个查询条件(多张索引表),根据逻辑运算符(and 、or)确定tids。



使用时注意

1.索引表是一张普通的hbase表,为安全考虑需要开启Hlog记录日志。

2.索引表的rowkey最好是不可变量,避免索引表中产生大量的脏数据。

3.如上例子,column是横向扩展的(宽表),rowkey设计除了要考虑region均衡,也要考虑column数量,即表不要太宽。建议不超过3位数。

4.如上代码,一个put操作其实是先后向两张表put数据,为保证一致性,需要考虑异常处理,建议异常时重试。



效率情况

put操作效率不高,如上代码,每插入一条数据需要创建一个新的索引表连接(可以使用htablepool优化),向索引表插入数据。即耗时是双倍的,对hbase的集群的压力也是双倍的。当索引表有多个时,压力会更大。

查询效率比filter高,毫秒级别,因为都是rowkey的查询。

如上是估计的效率情况,需要根据实际业务场景和集群情况而定,最好做预先测试。



Coprocessor二级索引方案优劣

优点:在put压力不大、索引region均衡的情况下,查询很快。

缺点:业务性比较强,若有多个字段的查询,需要建立多张索引表,需要保证多张表的数据一致性,且在hbase的存储和内存上都会有更高的要求。
分享到:
评论

相关推荐

    使用Hbase协作器(Coprocessor)同步数据到ElasticSearch(hbase 版本 1.2.0-cdh5.8.0, es 2.4.0 版本)

    在某些场景下,我们需要将HBase的数据实时同步到Elasticsearch,以便于进行高效查询和分析。在这个场景下,HBase的协作器(Coprocessor)机制提供了一个解决方案。 HBase的协作器机制允许开发者在HBase的...

    HBase中Coprocessor的介绍以及实际业务场景中的使用.pdf

    讲师:陈杨——快手大数据高级研发工程师 ...内容概要:(1)讲解hbase coprocessor的原理以及使用场景,(2) coprocessor整个流程实战,包括开发,加载,运行以及管理(3)结合1,2分析coprocessor在rsgroup中的具体使用

    hbase-solr-coprocessor:通过solr实现hbase二级索引,主要通过hbase的coprocessor的Observer实现

    项目核心为SolrIndexCoprocessorObserver,该类继承BaseRegionObserver,并实现postPut和postDelete方法,以实现hbase数据同步到solr。考虑到solr插入效率和频繁写入的问题,这里实现了一个简单的缓冲池,当达到最大...

    藏经阁-HBase Coprocessor-22.pdf

    3.提高数据查询效率:HBase Coprocessor 可以实现二级索引的创建和维护,提高数据查询的效率。 HBase Coprocessor 是一种强大的机制,可以帮助开发者实现对 HBase 的扩展和自定义,提高数据处理和分析的效率。

    HBaseCoprocessor的实现与应用.pdf

    **灵感来源**:由于 HBase 基于 RowKey 进行数据组织,因此很难直接支持除 RowKey 之外的其他查询方式,即所谓的“二级索引”。这使得在没有索引的情况下执行求和、计数、排序等操作变得复杂且效率低下,通常需要...

    HBase Coprocessor 优化与实验

    HBase是一种非关系型、面向列的分布式数据库系统,它基于Hadoop之上构建,旨在为大规模数据提供高可靠、高性能的支持。HBase的核心优势在于其能够处理海量数据的同时保持较高的访问速度。这得益于它的数据分布策略...

    HBase-coprocessor.pptx

    《深入理解HBase Coprocessor:扩展与应用》 HBase Coprocessor 是一个强大的功能,它为HBase提供了一种扩展...在实际应用中,合理利用Coprocessor可以显著提升HBase的性能和功能,是优化HBase应用的关键技术之一。

    hbase_coprocessor_hbase_coprocessorjava_源码

    在HBase中,Coprocessor机制是一个强大的特性,它允许用户在HBase服务器端自定义扩展功能,如数据过滤、统计计算、访问控制等。这个压缩包“hbase_coprocessor_hbase_coprocessorjava_源码”显然包含了用Java API...

    HBase海量数据存储实战视频教程

    手把手视频详细讲解项目开发全过程,需要的小伙伴自行百度网盘下载,链接见附件,永久有效。 课程简介 从HBase的集群搭建、HBaseshell操作、java编程、架构、原理、涉及的数据结构,并且结合陌陌...5. HBase数据结构

    HBaseCoprocessor的实现与应用.zip

    1. **HBase Coprocessor概述**:Coprocessor是HBase内置的一种机制,它允许用户在RegionServer端和客户端实现自己的逻辑,如数据过滤、数据校验、审计等,从而实现了对数据操作的细粒度控制。Coprocessor的设计理念...

    关系型数据库的数据导入Hbase

    - Phoenix:Phoenix是建立在Hbase之上的SQL层,可以直接在Hbase上执行SQL查询,同时支持JDBC接口。通过Phoenix,可以在应用层实现对RDBMS的实时读写操作,间接完成数据同步。 在进行数据导入时,还需要考虑数据清洗...

    2-6+HBase+Coprocessor.pdf

    HBase Coprocessor机制源于Google Bigtable的协处理器概念,旨在增强HBase的功能,提供更高效的数据处理能力。Coprocessor允许在HBase的RegionServer上运行用户自定义的代码,实现了数据处理的本地化,从而减少了...

    HBase官方文档中文版-HBase手册中文版

    HBase设计目标是提供大规模数据的实时读写能力,它运行在Hadoop之上,利用HDFS作为其底层存储系统。HBase的数据模型基于稀疏、多维度、排序的映射表,其中行键、列族、列限定符和时间戳构成数据的唯一标识。 二、...

    利用Hbase的Coprocessor实现的增量式Apriori算法

    增量式的Apriori算法,有点像分布式的Apriori,因为我们可以把已挖掘的事务集和新增的事务集看作两个互相独立的数据集,挖掘新增的事务集,获取所有新增频繁集,然后与已有的频繁集做并集,对于两边都同时频繁的项集...

    hbase社区2018精选资料

    另外,HBaseCoprocessor的实现与应用也是重要的知识点,Coprocessor提供了在服务器端扩展HBase功能的能力。 运维指南部分讲解了HBase2.0的新特性,比如In-MemoryCompaction,这是一个内存压缩技术,有助于提升数据...

    hbase与hive数据同步共4页.pdf.zip

    2. **HBase Coprocessor**: HBase支持coprocessor机制,可以在RegionServer上执行用户定义的逻辑,实现数据写入HBase的同时,触发数据同步到Hive的操作。这种方法可以减少网络传输,提高效率。 3. **使用Apache ...

    hbase 权限配置.docx

    通过配置 HBase 权限,可以对不同的用户或组授予不同的权限,以确保数据的安全和可靠性。 一、HBase 权限配置的重要性 HBase 权限配置是非常重要的,因为它可以防止未经授权的访问和操作,从而保护数据的安全和...

    hbase-0.98.6-cdh5.3.6.zip

    9. ** Coprocessor机制**:HBase 0.98.6引入了Coprocessor框架,允许用户自定义插件在Region服务器端执行,实现数据的预处理或后处理,提升性能和安全性。 10. **MapReduce集成**:HBase可以与MapReduce结合,进行...

    HBase开启审计日志

    在大数据领域,HBase被广泛用于实时读/写访问以及随机查询的大规模数据集。随着数据安全的重要性日益凸显,HBase提供了多种安全机制来保障数据的安全性。其中,审计日志功能是记录用户对HBase进行的各种操作的重要...

Global site tag (gtag.js) - Google Analytics