Hbase二级索引

HBase在0.92之后引入了coprocessors,提供了一系列的钩子,让我们能够轻易实现访问控制和二级索引的特性。下面简单介绍下两种coprocessors,第一种是Observers,它实际类似于触发器,第二种是Endpoint,它类似与存储过程。由于这里只用到了Observers,所以只介绍Observers,想要更详细的介绍请查阅(https://blogs.apache.org/hbase/entry/coprocessor_introduction)。observers分为三种:

RegionObserver:提供数据操作事件钩子;

WALObserver:提供WAL(write ahead log)相关操作事件钩子;

MasterObserver:提供DDL操作事件钩子。

相关接口请参阅hbase api。

下面给出一个例子,该例子使用RegionObserver实现在写主表之前将索引数据先写到另外一个表:

package com.dengchuanhua.testhbase;

import java.io.IOException;
import java.util.Iterator;
import java.util.List;

import org.apache.hadoop.hbase.CoprocessorEnvironment;
import org.apache.hadoop.hbase.KeyValue;
import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.coprocessor.BaseRegionObserver;
import org.apache.hadoop.hbase.coprocessor.ObserverContext;
import org.apache.hadoop.hbase.coprocessor.RegionCoprocessorEnvironment;
import org.apache.hadoop.hbase.regionserver.wal.WALEdit;

public class TestCoprocessor extends BaseRegionObserver {

	private HTable table = null;
	
	@Override
	public void start(CoprocessorEnvironment env) throws IOException {  
//        pool = new HTablePool(env.getConfiguration(), 10);
        table = new HTable(env.getConfiguration(), "test_index");
    }
	
	@Override
	public void prePut(final ObserverContext<RegionCoprocessorEnvironment> e,
			final Put put, final WALEdit edit, final boolean writeToWAL)
			throws IOException {
		// set configuration
//		Configuration conf = new Configuration();
		// need conf.set...

		List<KeyValue> kv = put.get("family".getBytes(), "cog".getBytes());
		Iterator<KeyValue> kvItor = kv.iterator();
		while (kvItor.hasNext()) {
			KeyValue tmp = kvItor.next();
			Put indexPut = new Put(tmp.getValue());
			indexPut.add("family".getBytes(), "cog".getBytes(), tmp.getRow());
			table.put(indexPut);
			table.flushCommits();
		}
	}
	
	@Override
    public void stop(CoprocessorEnvironment env) throws IOException {
		table.close();
    }
}

 写完后要加载到table里面去,先把该文件打包成test.jar并上传到hdfs的/demo路径下,然后操作如下:

 

1. disable ‘testTable’

 

2. alter ‘testTable’, METHOD=>’table_att’,'coprocessor’=>’hdfs:///demo/test.jar|com.dengchuanhua.testhbase.TestCoprocessor|1001′

 

3. enable ‘testTable’

 

然后往testTable里面插数据就会自动往indexTableName写数据了。

ES整合HBase实现二级索引 前言; es整合hbase实现二级索引的目的,只要是因为hbase不具备全文检索,只有rowkey是全局的唯一标识,在大量数据的前提下,想要根据字段进行检索,没办法利用rowkey就会出现效率低下的情况.刚好es具备全文检索的优良传统,两个优秀的框架注定是要擦出点火花来的. 设计思想: 在es中存储标题,在hbase 中存储正文 实现思路: 1.使用代码解析excel,读取excel的内容 2.将... 阅读详情

相关推荐

HBase二级索引原理与代码实例讲解

HBase是一个分布式、可扩展、支持实时读/写访问的开源非关系型数据库,常用于存储大型结构化数据。HBase底层基于HDFS存储,其数据模型为键值对,键由行键、列族和列限定符组成。然而,这种简单的数据模型在查询效率上存在一定局限性,尤其是在进行多列查询或范围查询时,需要遍历整个行键,效率较低。为了解决这一问题,HBase引入了二级索引机制。通过二级索引,可以快速定位到特定列族或列限定符下的数据,从而提高查询效率。

AI天才研究院 1745

Hbase构建二级索引的一些解决方案

hbase构建二级索引1 为什么需要二级索引HBase的一级索引就是rowkey,我们仅仅能通过rowkey进行检索。假设我们相对Hbase里面列族的列列进行一些组合查询,就只能全表扫描了...

大数据技术派 3603

IPMI的SOL (Serial Over LAN) 和 UART

UART全名是Universal Asynchronous Receiver/Transmitter(通用異步接收/发送器),它是一个常用的異步串行传输协议。透过UART传输前,接收方须要先知道传输方的鲍率(Baud rate):单位时间内,讯号状态变化的次数。例如 115200 bps,表示每秒会传送115200个bits--> 因此读取率就是 1/115200=8.6微秒读取一次讯号。封包内的资料长度:通常是 8bits。

yeiris的博客 1万+

使用Phoenix创建二级索引

1. 为什么需要用二级索引? 对于HBase而言,如果想精确地定位到某行记录,唯一的办法是通过rowkey来查询。如果不通过rowkey来查找数据,就必须逐行地比较每一列的值,即全表扫瞄。对于较大的表,全表扫描的代价是不可接受的。但是,很多情况下,需要从多个角度查询数据。例如,在定位某个人的时候,可以通过姓名、身份证号、学籍号等不同的角度来查询,要想把这么多角度的数据都放到rowkey中几乎不可能...

vicleev的博客 3843

VSCode CMake 安装与配置详解

概述 在windows上使用cmake编译C/C++程序时,首先需要CMake,安装gcc/g++编译环境,然后使用VSCode 以及配置下CMakelist.txt。 所需工具: VSCode (需要安装以下插件) C/C++ C++ Intellisense CMake CMake tools CMake Tools Helper CMake MinGW 安装CMake 下载链接:...

Markus 8万+

AD元件库构建及维护之——DbLib公共元件库的使用教程

AD元件库构建及维护之——DbLib元件库的使用教程

qq_43105486的博客 2万+

Hbase 二级索引

Hbase 使用二级索引原因: 目前 HBase 主要应用在结构化和半结构化的大数据存储上,其在插入和读取上都具有极高的性能表现,这与它的数据组织方式有着密切的关系,在逻辑上,HBase 的表数据按RowKey 进行字典排序, RowKey 实际上是数据表的一级索引(Primary Index),由于HBase 本身没有二级索引(Secondary Index)机制,基于索引检索...

fwk19840301的博客 1196

从零到一:高通QCS6490边缘AI开发板的Linux生态构建与实战避坑指南

本文详细介绍了在高通QCS6490边缘AI开发板上构建Linux生态系统的完整流程,包括开发环境准备、系统镜像构建与烧录、AI运行时环境配置、模型部署优化以及性能调试。重点解析了如何利用Hexagon DSP的高达12 TOPS AI算力,并提供了实战中的避坑指南和性能优化技巧,帮助开发者高效实现边缘AI应用从概念验证到产品落地的全过程。

eee77的博客 770

Hbase中的二级索引

Hbase中的二级索引 一、什么是索引 索引是一种数据结构,为了加速查询! HBase中的一级索引指,数据在写入region时,会根据rowkey进行排序后写入,之后regionserver在加载region时,会自动为当前region的rowkey创建一个LSM树的索引!方便对当前region,rowkey的查询! HBase 里面只有 rowkey 作为一级索引, 如果要对库里的非 rowkey 字段进行数据检索和查询, 往往要通过 MapReduce/Spark 等分布式计算框架进行,硬件资源消

weixin_42796403的博客 4418

华为OD 面试手撕代码真题【判断链表是否有环】

华为OD 面试手撕代码真题【判断链表是否有环】

MISAYAONE的博客 7239

ue 打包linux程序 在windows系统 2026

ue 打包linux程序 在windows系统 2026

jacke121的专栏 372

HBase二级索引方案

01 HBase简介 HBase是一个构建在HDFS之上,用于海量数据存储分布式列存储系统。 参见下图,由于在HBase中: 表的每行都是按照RowKey的字典序排序存储表的数据是按照RowKey区间进行分割存储成多个region 所以HBase主要适用下面这两种常见场景: 适用于基于rowkey的单行数据快速随机读写适合基于rowkey前缀的范围扫描 02 为什么需要HB...

沧海一粟的博客 1万+

YOLO格式数据集【数据增强】终极脚本 | 70+种顶级数据增强方法 | 可带标签增强

YOLO格式数据集【数据增强】终极脚本 | 70+种顶级数据增强方法 | 可带标签增强

Coding... 5502

HBase 的二级索引和配置实现

HBase 原生不支持二级索引,但通过倒排索引、协处理器或者借助 Apache Phoenix,可以实现二级索引。不同的实现方式各有优缺点,适合不同的业务场景。倒排索引实现简单,但需要额外的存储空间和更新开销;协处理器提供了更加灵活和高效的服务器端解决方案,但需要一定的开发和维护成本;而 Phoenix 则提供了简单的 SQL 接口,适合轻量级开发场景。通过合理设计和优化二级索引,可以显著提升 HBase 的查询效率,满足多维度数据检索的需求。

goTsHgo的博客 1908

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

HBase Coprocessor实现HBase二级索引

用Coprocessor实现HBase的二级索引,遇到了很多问题,记录一下 首先本次的感想是: 官方文档很重要! 日志非常重要!!! 用的数据是POES粒子通量数据,选取其中的位置信息,mag_lat_sat, mag_lon_sat,时间信息time,L值IGRF_L和B值Btot,以及各能段0度和90度方向质子和电子的粒子通量数据存储,row key是通过L、lat、lon计算出来的索...

touziss的博客 1051

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

使用ES作为hbase的二级索引进行查询

先上代码,ES的工具类 /** * elasticsearch 工具类 */ public class elasticsearchUtil { private static TransportClient client = null; private static Settings build = null; static { build = Se...

郭大帅 7275

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

HBase的二级索引

使用HBase存储中国好声音数据的案例,业务描述如下: 为了能高效的查询到我们需要的数据,我们在RowKey的设计上下了不少功夫,因为过滤RowKey或者根据RowKey查询数据的效率是最高的,我们的RowKey的设计是:UserID + CreateTime + FileID,那么我们在HBase中的数据格式如下: 每一行数据中包含两个Column:f:c和f:n 我们在...

aohuang8877的博客 399

Solr-Hbase 二级索引的实现

为什么HBase要建立二级索引 在HBase中检索数据通常有以下三种方式: 通过get, 指定RowKey获取唯一一条记录 通过scan, 设置start和stop进行范围匹配 全表扫描 所以我们发现, 想要精确且快速的定位在HBase表中某一条记录, 唯一的办法也就是通过RowKey进行查询。 然而在多数情况, 需要从多个条件查询数据, 再依靠单一的Rowkey查询已经不满足需求。 方案 Hbase —–> Key Value Store —> Solr ——-> Web前端实时查询

JordanZ的博客 1681

Hbase优化之二级索引

1. 为什么需要用二级索引? 对于HBase而言,如果想精确地定位到某行记录,唯一的办法是通过rowkey来查询。如果不通过rowkey来查找数据,就必须逐行地比较每一列的值,即全表扫瞄。对于较大的表,全表扫描的代价是不可接受的。但是,很多情况下,需要从多个角度查询数据。例如,在定位某个人的时候,可以通过姓名、身份证号、学籍号等不同的角度来查询,要想把这么多角度的数据都放到rowkey中几乎不可能...

不见其长,日有所长 925

HBase二级索引实践(带你感受二级索引的力量)

hyper_table之前HBase SQL BulkLoad环节创建的,我们将数据通过BulkLoad方式导入预先分好Region的hyper_table表中。具体参考如下博文: HBase中利用SQL BulkLoad快速导入数据 这里大家只要清楚此表结构即可,结构如下: hyper_table表结构 字段 rowkey num country rd 类型 ...

tianyeshiye 603

使用solr构建hbase二级索引

使用solr构建hbase二级索引@(HBASE)[hbase, solr]使用solr构建hbase二级索引 一概述 一业务场景描述 二技术方案 1技术方案一 2技术方案二 3关于索引的建议 二使用hbase-indexer构建hbase二级索引 一 安装环境准备 二 配置solr 三 配置hbase-solr 四测试 1hbase中创建测试表 2添加配置文件用于将solr中的field映射为hb

jediael_lu的专栏 7913

Hbase 的二级索引

最终使用协处理器实现一致的二级索引

主要写大数据集群一线运维和学习工作经验 552
上一篇: hadoop 常见错误
下一篇: 常用hbase shell 命令
weixir123
博客等级 码龄16年 1粉丝 207原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值