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二级索引实现方案。基于hadoop平台,设计了Hbase的二级索引机制。
奇虎360 HBASE 二级索引的设计与实践 pdf 完整版
Indexer 索引和搜索不会影响 HBase 运行的稳定性和 HBase 数据写入的吞吐量,因为索引和 搜索过程是完全分开并且异步的。Lily HBase Indexer 在 CDH5 中运行必须依赖 HBase、 SolrCloud 和 Zookeeper 服务。
奇虎360 HBASE 二级索引的设计与实践 pdf 完整版,支持千亿级数据量
该索引方案是一种较好的实现方式,而且是现有很少的hbase索引实现方法
本方案主要参照了华为公布的HBase二级索引实现方案。为每个DataTable创建一个与之对应的IndexTable,通过各种途径,保证IndexTable Region与DataTable Region一一对应,并且存储在同一个RegionServer上。
HBASE二级索引的设计与实践.ppt
基于协处理器的HBase二级索引方法.pdf
基于索引列聚集的HBase二级索引设计,张祎,双锴,HBase作为Apache开源的列式存储数据库,在一定程度上解决了海量数据存储的问题,并提供了高效的数据读写性能。但是由于HBase缺乏二级��
该文档主要用于创建在solr中创建hbase的二级索引的教程,新建solr的分片,以及后续修改和新建配置文件等,仅供参考
淘宝选择HBASE的原因及应用举例,适合初学者
hbaseSecondaryIndex是一个hbase二级索引的实现,基于solr+hbase coprocessor框架为hbase提供索引表支持。 此工程可打包为一个hbase的插件,通用方便。 这篇文档的目的是为了向您介绍hbaseSecondaryIndex的基本使用...
楼主实操的步骤整理的,只需要将Zookeeper的ip换成自己集群的就可以一步步地跟着文档实现,感兴趣的同学可以看看。
测试代码,目的是借助solr实现hbase二级索引,以使hbase支持高效的多条件查询。主要通过hbase的coprocessor的Observer实现,通过coprocessor在记录插入hbase时向solr中创建索引。 项目核心为...
一、解决的问题 1、RowKey 例子 ...二、对于上面需求 简单解决方案(二级索引 相当于添加一层映射关系到 原RowKey) 增加新的Hbase表 RowKey:hive_table__date___date__hive_table (解释:hive_tabl
public class IndexBuilder3 extends Configured{ public static class MapperIndex extends TableMapper,Put>{ private String tableName; private String columnFamily;...// 该列对应的索引表名字
基于phoenix的Hbase二级全文索引方法及系统.pdf
的二级索引 该解决方案是 100% Java,与 Apache HBase 0.94.8 兼容,并在 ASL 下开源。 目前支持以下功能。 表上的多个索引, 多列索引, 基于列值的一部分的索引, 使用索引进行等于和范围条件扫描,以及 将数据...
基于协处理器的HBase分类二级索引设计.pdf