`

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写数据了。

分享到:
评论

相关推荐

    HBase二级索引

    HBase 二级索引 HBase 二级索引是指在 HBase 之上建立的一种二级索引机制,用于提高查询效率。根据华为公布的 HBase 二级索引实现方案,本方案主要参照了该方案,设计了 HBase 的二级索引机制。 知识点一:HBase ...

    hbase二级索引

    描述中提到的"hbase-transactional-tableindexed-master"可能是一个包含实现HBase二级索引和事务处理的项目或代码库。在HBase中,事务支持是相对有限的,主要是因为其分布式和无中心的设计。为了实现事务,通常需要...

    奇虎360 HBASE 二级索引的设计与实践

    奇虎360 HBASE二级索引的设计与实践内容总结: 背景介绍: 在奇虎360的实际应用中,仅通过Rowkey(RK)进行索引存在一系列问题。例如,索引较为单一,无法满足多维度查询需求,例如字段或列的多维度查询。此外,...

    CDH使用Solr实现HBase二级索引.docx

    CDH 使用 Solr 实现 HBase 二级索引 在大数据处理中,HBase 是一种流行的 NoSQL 数据库,用于存储大量的数据。然而,在查询和检索数据时,HBase 的性能可能不太理想。这是因为 HBase 是基于 Key-Value 的存储方式,...

    360HBASE二级索引的设计与实践

    ### 360HBASE二级索引的设计与实践 #### 背景 在大数据处理领域,特别是面对海量数据(如千亿级别的数据量)时,高效的数据存储与快速查询成为了关键的技术挑战之一。HBase作为一种分布式、面向列的NoSQL数据库...

    Hbase二级索引与JOIN

    ### HBase二级索引与JOIN知识点详解 #### HBase简介 - **定义**: HBase是一种分布式、面向列的NoSQL数据库系统,它基于Google Bigtable论文实现。 - **底层架构**: HBase的数据存储依赖于Hadoop Distributed File ...

    HBase二级索引实现方案

    本方案主要参照了华为公布的HBase二级索引实现方案。为每个DataTable创建一个与之对应的IndexTable,通过各种途径,保证IndexTable Region与DataTable Region一一对应,并且存储在同一个RegionServer上。

    基于协处理器的HBase二级索引方法.pdf

    针对这一问题,本文提出了一种创新性的解决方案——基于协处理器(Coprocessor)的HBase二级索引方法。协处理器是一种嵌入在HBase服务器端的自定义代码,它可以在数据读写过程中执行用户定义的操作,为HBase提供了...

    hbase+solr创建二级索引完整操作

    ### hbase+solr创建二级索引完整操作 #### 一、概述 本文档详细介绍了如何利用HBase和Solr创建二级索引的过程。通过整合HBase与Solr的优势,可以构建高性能的数据存储与检索系统。HBase作为分布式列族数据库,能够...

    hbaseSecondaryIndex:hbase二级索引实现

    hbaseSecondaryIndex是一个hbase二级索引的实现,基于solr+hbase coprocessor框架为hbase提供索引表支持。 此工程可打包为一个hbase的插件,通用方便。 这篇文档的目的是为了向您介绍hbaseSecondaryIndex的基本使用...

    HBase分布式二级索引通用方案研究.pdf

    文章指出,部署这一通用方案后,实验结果表明,该方案能够很好地满足创建和维护HBase二级索引的要求,并且能够保证索引与记录的一致性。这表明,该方案在实践中具有很好的可行性和效果,对于进一步研究分布式存储中...

    基于协处理器的HBase分类二级索引设计.pdf

    在实施基于协处理器的HBase二级索引设计时,应参考相关的技术文档和最佳实践,例如《HBase: The Definitive Guide》等专业书籍。此外,社区论坛和官方文档也是获取最新信息和解决问题的重要资源。在实际项目中,还...

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

    测试代码,目的是借助solr实现hbase二级索引,以使hbase支持高效的多条件查询。主要通过hbase的coprocessor的Observer实现,通过coprocessor在记录插入hbase时向solr中创建索引。 项目核心为...

    HBase二级索引 简易理解

    一、解决的问题 1、RowKey 例子 ...二、对于上面需求 简单解决方案(二级索引 相当于添加一层映射关系到 原RowKey) 增加新的Hbase表 RowKey:hive_table__date___date__hive_table (解释:hive_tabl

    基于phoenix的Hbase二级全文索引方法及系统.pdf

    "基于phoenix的Hbase二级全文索引方法及系统" 本文主要介绍了基于phoenix的Hbase二级全文索引方法及系统,旨在解决Hbase数据的全文检索问题。该方法包括两大步骤:一是对Hbase原始数据表建立二级全文索引表,并存储...

    HBase_Secondary_Index

    具体来看,“HadoopDevelopment•SecondaryIndexinHBase”揭示了HBase二级索引是华为Hadoop R&D团队关注的重点开发领域之一。此外,文档中提到了HDFS NNHA(Hadoop-2),这是一个高可用的NameNode设计,对于HBase的...

Global site tag (gtag.js) - Google Analytics