Hbase 学习(八) 使用MapReduce&华为二级索引(原理)

在hbase的demo里面有个IndexBuilder的例子,它就是使用了MapReduce来操作hbase的,例子也比较简单,但是只包括了Mapper。

另外网上还有另外一个例子,也是说明这个的,这个例子更为全面一点,包括了Mapper和Reducer。

http://www.cnblogs.com/chenli0513/archive/2012/01/06/2314886.html

这里就不说什么了,很简单,一看就懂。



这个是华为的二级索引方案,已经开放源代码了,下面是网上的一篇讲解原理的帖子,发出来和大家共享一下。

经过本人认真阅读了一下代码,发现这个源码仅供参考,想要集成到原有的集群当中是有点儿难度的,它对hbase的源码进行不少的修改。

源码地址:https://github.com/Huawei-Hadoop/hindex

下面来对其方案做一个分析。

1.整体架构

这个架构在Client Ext中设定索引细节,在Balancer中收集信息,在Coprocessor中管理二级索引数据。

2.表创建

在创建表的时候,在同一个region server上创建索引表,且一一对应。

3.插入操作

在主表中插入某条数据后,用Coprocessor将索引列写到索引表中去,写道索引表中的数据的主键为:region开始key+索引名+索引列值+主表row key。这么做,是为了让其在同一个分布规则下,索引表会跟主表在通过region server上,在查询的时候就可以少一次rpc。

4.scan操作

一个查询到来的时候,通过coprocessor钩子,先从索引表中查询范围row,然后再从主表中相关row中扫描获得最终数据。

5. split操作处理

为了使主表和索引表在同一个RS上,要禁用索引表的自动和手动split,只能由主表split的时候触发,当主表split的时候,对索引表按其对应数据进行划分,同时,对索引表的第二个daughter split的row key的前面部分修改为对应的主键的row key。

6. 性能

查询性能极大提升,插入性能下降10%左右

总结:

本文对华为hbase使用coprocessor进行二级索引的方案的创建表,插入数据,查询数据的步骤进行了一个粗略分析,以窥其全貌。在使用的时候,可以作为一个参考。

转载自:http://www.dengchuanhua.com/167.html

时间: 2024-09-01 19:22:03

Hbase 学习(八) 使用MapReduce&华为二级索引(原理)的相关文章

HBase二级索引与Join

二级索引与索引Join是多数业务系统要求存储引擎提供的基本特性,RDBMS早已支持,NOSQL阵营也在摸索着符合自身特点的最佳解决方案. 这篇文章会以HBase做为对象来讨论如何基于Hbase构建二级索引与实现索引join.文末同时会列出目前已知的包括0.19.3版secondary index, ITHbase, Facebook方案和官方Coprocessor的介绍. 理论目标 在HBase中实现二级索引与索引Join需要考虑三个目标: 1,高性能的范围检索. 2,数据的低冗余(存储所占的数

HBase二级索引

我们会经常谈及二级索引,这是对全表数据进行另外一种方式的组织存储,是针对table级别的.如果要为HBase上的表实现一个强一致性的二级索引,那么就无法逃避分布式事务,而这一直是用户最期待的功能. 而即使只需要保证最终一致性,这个索引也并不好实现,因为你需要额外的表以存储过程数据,需要解决宕机恢复问题等 撇开分布式事务,我们是否可以考虑对索引的要求进行降级,比如把Region看成是全表下的子表,实现一套Region级别的索引,通过功能上的牺牲以换取实现的简易及稳定 一般来说,对数据库建立索引,往

HBase学习笔记——避免热点Region的一些技巧

HBase row key设计得不好.频度各异的查询类型,会导致热门数据集中坐落在某几个Region上,造成Region热点,集群负载不均衡. 能采取哪些解决方案,首先要明确访问模式,然后针对性优化: 牺牲有序性,散列化row key. 如果不需要数据的有序性: 在row key首部增加原始row key的hash code,使数据均匀散列. 或者,将原始row key的MD5作为实际的row key. 对整个row key散列牺牲了有序性和根据前缀匹配进行范围扫描的能力. 为此,我们也可以对r

HBase学习总结(3):HBase的数据模型及工作机制

一.HBase数据模型 HBase模式里的逻辑实体包括: (1)表(table):HBase用表来组织数据.表名是字符串(String),由可以在文件系统路径里使用的字符组成. (2)行(row):在表里,数据按行存储.行由行键(rowkey)唯一标识.行键没有数据类型,总是视为字节数组byte []. (3)列族(column family):行里的数据按照列族分组,列族也影响到HBase数据的物理存放,因此,它们必须事前定义并且不轻易修改.表中每行拥有相同列族,尽管行不需要在每个列族里存储数

HBase学习笔记——高表与宽表的选择

hbase中的宽表是指很多列较少行,即列多行少的表,一行中的数据量较大,行数少:高表是指很多行较少列,即行多列少,一行中的数据量较少,行数大. hbase的row key是分布式的索引,也是分片的依据. hbase的row key + column family + column qualifier + timestamp + value 是HFile中数据排列依据.HFile据此,对数据的索引到data block级别,而不是行级别.所以这种key是HFile内部的粗粒度(data block

[MySQL 源码] innodb如何创建二级索引

以下为分析问题时的随笔.写的很凌乱,仅做记录,以备后用...... ////////////////////////////////////////////////////////////// ha_innobase::add_index是innodb创建索引的接口函数. 以下所有的讨论都是基于创建一个非聚集的二级索引.因此一些过程是被省略掉了. 1.获取数据词典信息           indexed_table = dict_table_get(prebuilt->table->name,

Cassandra1.1.1建立复合主键后,如何再建立二级索引? -

最近在使用Cassandra,版本为1.1.1, CQL版本为3.0.0.遇到如下问题. 目标:利用复合主键进行查询和排序,并想利用二级索引进行多条件查询. 首先CQL建表,用到复合主键(instigator, startedAt): &http://www.aliyun.com/zixun/aggregation/37954.html">nbsp; CREATE TABLE altercations ( instigator text, startedAt text, ships

在hadoop下运用Mapreduce构建文本索引

在hadoop下运用Mapreduce构建文本索引 樊超 Hadoop是开源的一个分布式系统基础架构,借助Hadoop,可以在不了解分布式底层细节的情况下,开发分布式程序.文本索引在生产生活中有着广泛的应用,从搜索引擎的倒排索引到操作系统的指令都需要使用文本索引.在hadoop环境中构建文本索引,能够为搜索引擎和文档全文索引提供支持,并且同时兼顾了分布式系统的优点.在Hadoop环境中构建本索引的主要价值有:在分布式平台Hadoop建立倒排索引可以提高建立索引的速度,能够方便的存储大数据量,有着

二级域名原理以及程序

程序|二级域名 二级域名原理以及程序,申请即可开通 [普通框架式二级域名] 要达到二级名的效果,必须一下条件以及流程:1.必须有一个顶级域名,而且此域名必须做好泛解析并做好指向.2.必须有一台独立的服务器.泛解析的域名指向该服务器.3.在服务器上的IIS建一个空的主机头名的web站点.4.将默认的页面设置为你的二机解析程序(比如:freedns.asp)5.二级域名系列程序(包括申请页:shenqing.htm,添加页add.asp,解析页,) 此程序的优点:a,可以限制申请域名的敏感字,比如