zoukankan      html  css  js  c++  java
  • HBase 笔记3

    数据模型

    Namespace 表命名空间: 多个表分到一个组进行统一的管理,需要用到表命名空间

      表命名空间主要是对表分组,对不同组进行不同环境设定,如配额管理  安全管理

      保留表空间: HBase中有2个保留表空间是预先定义

        HBase 系统表空间,用于HBase内部表

        default: 哪些没有定义表空间的表都被分配到这个下面

    Table 表:由一个或多个列族组成

    Row 行:一行包含多个列,这些列通过列族分类

    ColumnFamily 列族:列族是多个列的集合

    Column Qualifier列: 多个列组成一行,列可以随意定义的,一个行中的列不限名字,不限数量,只限定列族

    cell 单元格: 一个列中可以存储多个版本的数据,每个版本称为一个单元格cell

    Timestamp 时间戳:也可以称为版本号

     HBase存储数据

     Master: 负责启动的时候分配Region到具体的Region Server,执行各种管理操作,如Region的分割和合并

    RegionServer:一个Region Server上存在一个或多个Region,就是多个Region的集合

    Region: 表的一部分数据,HBase是一个自动分片的数据库,一个Region相当于关系型数据库中分区表的一个分区,每个region都有其实起始rowkey和结束rowkey

    HDFS:Hadoop一部分,HBASE与HDFS交互,HDFS是真正承载数据库的载体

    Zookeeper:第三方组件,不属于HBase。client需要读取的元数据表hbase:meta位置存在zookeeper上

    当操作到达Region时,HBase会把操作写入WAL(预写日志)中,同时数据存在基于内存的Memstore里,待达到一定数据量,刷写flush 到最终存储HFile

      故障恢复时,使用WAL可以恢复数据

    Store:每个region中包含多个Store实例,一个Store对应一个列组的数据

    memstore: 由于HDFS上文件不可修改, 数据会在memstore中整理成LSM树(顺序存储),之后刷写到HFile中,提高读取效率

        读取数据时先读取blockcache,再读取HFile+memstore

      

    WAL 预写日志是解决宕机之后的恢复问题

    数据到达Region时先写入WAL,然后再加载到memstore中,WAL中数据存储再HDFS上,不会丢失

    关闭/打开WAL

    异步的同步WAL

       HBase间隔多久会把操作从内存写入WAL,默认1s

    HFile由一个一个块组成,再HBase中一个块默认64KB,由列族上BLOCKSIZE属性定义

    Data:数据块    存储HBase表中的数据

    Meta: 元数据快  存储该HFile文件的元数据信息

    FileInfo 文件信息,时HFile的必要组成部分,存储这个文件的信息,如最后一个Key,平均Key的长度

    DataIndex  存储Data块索引信息的块文件么就是Data块的偏移值

    MetaIndex : 存储Meta块索引信息的块文件

    Trailer 必选,存储FileInfo DataIndex MetaIndex 块的偏移值'

     Data数据块的第一位存储的是块的类型,后面存储的是多个keyvalue键值对,也就是单元格cell的实现类

    cell是一个接口,keyvalue是实现类

    Row 行键   CF 列族  Col 列  TimeStamp 时间戳  

    增删改查真面目:

    HBase的增删改查实际都是新增操作:

    新增单元格时,HBase在HDFS上新增一条数据

    修改一个单元格时,HBase在HDFS上又新增一条数据,只是版本号比之前的大

    删除一个单元格时,HBase还是新增数据,只是数据没有value,类型为delete,并打上墓碑标记

      数据真正删除时是HFile合并时,忽略墓碑标记的数据,完成删除

     数据写入

     

    数据发出的第一时间被写入WAL,随后数据会立即被放入memstore中整理,最后当memstore太大达到阈值后,Flush到存储在硬盘上的HFile文件

     数据读取

    HBase 的scan操作会读取行键中的所有值,这样才能确定返回哪些数据(数据和墓碑标记不是存放在一起的)

     在Scan时store会创建store scanner实例把么么store和hfile结合起来扫描,storescanner打开时,会先定位起始行键startRow上,开始往下扫描

     

    Region定位:

    .META 元数据表,存储了所有的Region信息,一行记录就是一个Region,记录了Region的起始行,结束行,和该Region的连接信息,这样client可以通过这个来判断需要的数据在哪个region上

    -ROOT- 存储.META.的表的表 ,即存储了.Meta.在什么Region上的信息

    1)用户通过查找zookeeper上的/hbase/root-region-server节点获取-ROOT-表在哪个Region Server上

    2)访问-ROOt-表,看数据在哪个.Meta.表上,这个表在哪个Region Server上

    3)访问.Meta.表查询行键在哪个region里

    4)连接具体数据所在的Region Server上,使用scan遍历row

     从0.96版本之后,三层查询架构改成二层,-ROOT-去掉,.Meta.表所在的region server信息存储在ZK中的/hbase/meta-region-server中,再后来引入namespace,.Meta.表修改为hbase:meta

  • 相关阅读:
    洛谷 P1635 跳跃
    python write() argument must be str, not bytes
    python write() argument must be str, not bytes
    Python hashlib Unicode-objects must be encoded before hashing
    Python hashlib Unicode-objects must be encoded before hashing
    洛谷P1629 邮递员送信
    TypeError: Error when calling the metaclass bases Cannot create a consistent method resolution
    TypeError: Error when calling the metaclass bases Cannot create a consistent method resolution
    [USACO07FEB]银牛派对Silver Cow Party
    [USACO09OPEN]捉迷藏Hide and Seek
  • 原文地址:https://www.cnblogs.com/zy1234567/p/10316453.html
Copyright © 2011-2022 走看看