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

    xiaoxiao2026-05-17  15

    在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 相关资源:python入门教程(PDF版)
    最新回复(0)