• HBase二级索引、读写流程




    相关优秀博文案例:
    博客园:花未全开*月未圆:HBase的二级索引
    博客园:small_k:hbase实践之协处理器Coprocessor
    简书:5c7b85ab9023:Hbase使用Coprocessor构建二级索引
    CSDN:菜鸟级的IT之路:大数据~HBase



    HBase本身只提供基于行键和全表扫描的查询,而行键索引单一,对于多维度的查询困难.
    二级索引的本质就是建立各列值与行键之间的映射关系。

    一、HBse二级索引方案

    1.1 基于Coprocessor方案

    Apache Phoenix: 功能围绕着SQL on hbase,支持和兼容多个hbase版本, 二级索引只是其中一块功能。 二级索引的创建和管理直接有SQL语法支持,使用起来很简便, 该项目目前社区活跃度和版本更新迭代情况都比较好。

    ApachePhoenix在目前开源的方案中,是一个比较优的选择。主打SQL on HBase , 基于SQL能完成HBase的CRUD操作,支持JDBC协议。 Apache Phoenix在Hadoop生态里面位置:在这里插入图片描述

    1.2 Phoenix二级索引特点

    • Covered Indexes(覆盖索引) :把关注的数据字段也附在索引表上,只需要通过索引表就能返回所要查询的数据(列),所以索引的列必须包含所需查询的列(SELECT的列和WHRER的列)。
    • Functional indexes(函数索引): 索引不局限于列,支持任意的表达式来创建索引。
    • Global indexes(全局索引):适用于读多写少场景。通过维护全局索引表,所有的更新和写操作都会引起索引的更新,写入性能受到影响。 在读数据时,Phoenix SQL会基于索引字段,执行快速查询。
    • Local indexes(本地索引):适用于写多读少场景。 在数据写入时,索引数据和表数据都会存储在本地。在数据读取时,由于无法预先确定region的位置,所以在读取数据时需要检查每个region(以找到索引数据),会带来一定性能(网络)开销。

    二级索引的本质就是:建立各列值与行键之间的映射关系

    大体都是遵循类似的思路:构建一份“索引”的映射关系,存储在另一张hbase表或者其他DB里面。

    1.3 Phoenix 二级索引方案

    先建立一张映射到Phoenix的表,接着采用全局二级索引

    CREATE TABLE LJK_TEST (ID VARCHAR NOT NULL PRIMARY KEY,"mycf"."name" VARCHAR)
    
    CREATE INDEX COVER_LJKTEST_INDEX ON LJKTEST(name);
    

    二、HBase读写流程

    2.1 HBase写数据流程

    1. Client先访问zookeeper,从meta表获取相应region信息,然后找到meta表的数据
    2. 根据namespace、表名和rowkey根据meta表的数据找到写入数据对应的region信息
    3. 找到对应的regionserver
    4. 把数据分别写到HLog和MemStore上一份
    5. MemStore达到一个阈值后则把数据刷成一个StoreFile文件。(若MemStore中的数据有丢失,则可以从HLog上恢复)
    6. 当多个StoreFile文件达到一定的大小后,会触发Compact合并操作,合并为一个StoreFile,(这里同时进行版本的合并和数据删除。)
    7. 当Storefile大小超过一定阈值后,会把当前的Region分割为两个(Split),这里相当于把一个大的region分割成两个region,并由Hmaster分配到相应的HRegionServer,实现负载均衡。

    2.2 HBase读数据流程

    1. Client先访问zookeeper,从zookeeper中找到meta表region的位置,然后读取meta表中的数据。meta中又存储了用户表的region信息。
    2. 根据namespace、表名和rowkey在meta表中找到对应的region信息
    3. 找到这个region对应的regionserver
    4. 查找对应的region
    5. 先从MemStore找数据,如果没有,再到StoreFile上读(为了读取的效率)。
  • 相关阅读:
    URAL-1998 The old Padawan 二分
    URAL-1997 Those are not the droids you're looking for 二分匹配
    URAL-1991 The battle near the swamp 水题
    URAL-1989 Subpalindromes 多项式Hash+树状数组
    URAL-1987 Nested Segments 线段树简单区间覆盖
    URAL-1981 Parallel and Perpendicular 水题
    k8s-api
    golang test模块
    k8s-calico
    docker设置proxy
  • 原文地址:https://www.cnblogs.com/aixing/p/13327218.html
Copyright © 2020-2023  润新知