HBase存储原理剖析笔记

 

慕课网《HBase 存储原理剖析》学习总结

    说明:本文部分内容来自https://www.imooc.com/article/details/id/38969

    学习视频:https://www.imooc.com/learn/996

    视频案例演示源码:https://github.com/wind-free/springboot-HBaseDemo1.git

案列演示
作者:喵手空空
链接:https://www.imooc.com/article/details/id/38969
来源:慕课网
本文部分内容均来自慕课网
作者:喵手空空
链接:https://www.imooc.com/article/details/id/38969
来源:慕课网
本文部分内容均来自慕课网
作者:喵手空空
链接:https://www.imooc.com/article/details/id/38969
来源:慕课网
本文部分内容均来自慕课网
作者:喵手空空
链接:https://www.imooc.com/article/details/id/38969
来源:慕课网

一、HBase的存储模式

  1.行式存储与列式存储介绍

列簇式存储:概念

  • 列簇(多个数据列的组合),HBase表中的每个列都归属于某个列簇
  • 列簇是表的schame的一部分,但是列并不是
  • 创建表时,需要给出列簇的名称,不需要给出列的名称
  • 列名都是以列簇作为前缀
  • 访问控制磁盘和内存的使用统计都是在列簇层面进行
  • HBase准确的说是列簇数据库,而不是列数据库
  • 列簇数据库将列组织为列簇,每列都必须是某个列簇的一部分
  • 访问数据的单元也是列

作者:喵手空空
链接:https://www.imooc.com/article/details/id/38969
来源:慕课网

  2.行式存储与列式存储各自的特点

  (1)行式存储

    维护大量的索引;

    存储成本高

    不能够做到线性扩展

    随机读取效率非常高

    对事务的支持非常好

  (2)列式存储

      根据同一列数据的相似性原理,利于对数据进行压缩

      存储成本低

      由于每列数据分开存储,可以并行查找多列的数据

  3.行式存储与列式存储场景

  (1)行式存储

    表与表之间有关联关系,数据量不大(小于千万量级)

    强事务关联的特性

  (2)列式存储

       对于单列或者相对比较少的列获取频率较高

      针对多列查询,使用并行处理的查询

      利于数据压缩和线性扩展的存储

      事务使用率不高,读取的场景频率不高,同时数据量非常大

      随机更新某一行的频率不高

  4.HBase的列族式存储

  (1)列族式存储概念

     列簇(多个数据列的组合),HBase表中的每个列都归属于某个列簇

     列簇是表的schame的一部分,但是列并不是

      创建表时,需要给出列簇的名称,不需要给出列的名称

      列名都是以列簇作为前缀

      访问控制磁盘和内存的使用统计都是在列簇层面进行

      HBase准确的说是列簇数据库,而不是列数据库

      列簇数据库将列组织为列簇,每列都必须是某个列簇的一部分

      访问数据的单元也是列

 

     HBase表的组成

    

      RowKey :HBase中用RowKey去标识唯一的一行数据,一行数据中包含多个列簇

      Family:多个列簇。每一列簇包含多个列

      Column:列标识符。每一列数据包含了版本和值

      Timestamp:版本。可以理解为时间戳,也可以理解为一个数据的版本

      Value:数据值。数据本身的值

 

 

    数据存储模式

     

      其实就是HBase表反过来看的样子

      更抽象一点,其实HBase表数据就是Key-Value结构的

HBase表的组成

  • Table = RowKey + Family + Column + Timestamp + Value
  • RowKey :HBase中用RowKey去标识唯一的一行数据,一行数据中包含多个列簇
  • Family:多个列簇。每一列簇包含多个列
  • Column:列标识符。每一列数据包含了版本和值
  • Timestamp:版本。可以理解为时间戳,也可以理解为一个数据的版本
  • Value:数据值。数据本身的值

作者:喵手空空
链接:https://www.imooc.com/article/details/id/38969
来源:慕课网

       图解

     

HBase表的组成

  • Table = RowKey + Family + Column + Timestamp + Value
  • RowKey :HBase中用RowKey去标识唯一的一行数据,一行数据中包含多个列簇
  • Family:多个列簇。每一列簇包含多个列
  • Column:列标识符。每一列数据包含了版本和值
  • Timestamp:版本。可以理解为时间戳,也可以理解为一个数据的版本
  • Value:数据值。数据本身的值

作者:喵手空空
链接:https://www.imooc.com/article/details/id/38969
来源:慕课网

 

  (2)列数据属性

  (3)数据存储原型

  (4)存储示例

 

二、HBase数据表解析

  1.HBase建表语句解析

   关键字说明

     

   压缩算法

    

  2.HBase数据存储目录解析

    在hbase-site.xml文件中配置或查看存储目录的节点

      <property>

        <name>hbase.rootdir</name>

        <value>/home/hbase_data</value>

       </property>

    进入到HBase系统目录

    • temp

      当对表做创建或删除操作时,将表移动到tmp目录下,然后再进行处理

      临时交换的表,临时存储一些当前需要修改的数据结构

    • WALs

      预写日志,被HLog实例管理的WAL文件

      可以理解为存储HBase的日志,HBase分布式数据库系统的操作日志

    • archive

      存储表的归档和快照

      HBase在做分割或合并操作完成后,会将Hfile文件移动到该目录中,然后将之前的Hfile删除掉

      是由Master上的定时任务定期去处理,这个目录的作用可以简单理解为去管理HBase的数据

    • corrupt

       用于存放损坏的日志文件,一般是空的

    • data

      HBase存储数据的核心目录

      系统表和用户表数据都存储在这里

    • hbase.id

      HBase启动运行后,是集群中的唯一ID,用来标识HBase进程用的

    • hbase.version

      表明了集群的文件格式版本信息

      其实就是表明了Hfile的版本信息

    • oldWALs

      备份WALs中的日志文件

     data目录解析

 

  3.HBase元信息表

  

三、HBase存储设计

  1.HBase中的LSM存储思想

    (1)LSM树概念

      LSM日志结构合并树,有两个或两个以上存储数据的结构组成的,每一个数据结构各自对应自己的存储介质

    (2)LSM树的简易模型

     

    (3)LSM思想在HBase中的实现  

    

  2.HBase数据存储模块简介

    RegionServer = Region + Store + MemStore + StoreFile + HFile + HLog

     

  3.HBase Region解析

    (1)什么是Region

      每一个Region都会存储于确定的RegionServer上

       

    (2)Region特点

      1. 是HBase中分布式存储和负载均衡的最小单元
      2. Region的数据不能低于集群中节点的数量
      3. RegionServer对Region进行拆分  
      4. 尽量让Row key分散到不同的Region

  4.HBase HFile 解析

    Store + MemStore + StoreFile

    • Store与列簇是一对一的关系
    • MemStore是一个内存数据结构,保存修改的数据
    • StoreFile是由内存数据写入到文件后形成的

       

    HFile 文件

    • 是HBase存储数据文件的最基本的组织形式
    • 底层是Hadoop的二进制格式文件
    • 是用户数据的实际载体,存储Key-Value的数据
    • Scanned block section:会被读取,主要是存储用户数据
    • Nonscanned block section:不会被读取,主要包含元数据块
    • Load-on-open section:RegionServer启动时加载,主要是HFile的元数据
    • Trailer:HFile的基本信息,HFile元数据的一部分

 

    Data Block

    • HBase中数据的最基本的存储单元
    • 是实际存储用户数据的数据结构
    • 包含很多Key-Value

    

  5.HBase WAL解析

    (1)WAL介绍(预写日志)

      • WAL最重要的功能就是灾难恢复
      • WAL解决了什么问题:HA(高可用)问题
      • 解决:远程备份

        

     (2)HLog

      • WAL是通过HLog模块实现的
      • HLog是什么:HLog是实现WAL的类,一个RegionServer对应一个HLog实例

     

    (3)HLogKey

        WAL使用Hadoop的序列化文件将记录存储为Key-Value的数据集,Key就是HLog的Key

       

    (4)HLogSyncer(日志同步刷写类)

      

    (5)HLogRoller

      • 特点的时间去滚动日志,形成新的日志,避免单个日志文件过大    
      • 根据HLog的序列化的number对比已经持久化的HFile的序列号,删除旧的,不需要的日志     

        

  6.HBase Compaction解析

    (1)Compaction介绍

        Compaction会从一个Region的Store中选择一些HFile文件进行合并

    (2)Compaction作业

        随着系统不停的刷写,会导致存储目录中有过多的数据文件

    (3)Compaction分类

      • MinorCompaction:小合并    
      • MajorCompaction:大合并     

         

    (4)Compaction的触发时机

      MemStore 内存数据写入到硬盘上

      

四、Hbase数据存取解析

  1.HBase数据存取流程解析

    (1)数据存储

      客户端:HBase Client

      • 请求Zookeeper,确定 MetaTable所在RegionServer的地址    
      • 在根据RowKey找到归属的RegionServer    
      • HBase Client Put(Delete)数据,提交到RegionServer     

       

      服务器:HBase Server

      • Region Server 去获取行锁,Region更新共享锁    
      • 写HLog,WAL    
      • 写缓存,MemStore    
      • 将日志同步到HDFS    
      • 写满缓存后,启动异步线程将数据写入到硬盘上    
      • 可能触发Compaction或拆分     

       

    (2)数据获取

      客户端:HBase Client

      • 请求Zookeeper,确定 MetaTable所在RegionServer的地址    
      • 去对应的RegionServer地址拿到对应数据     

         

      服务端:HBase Server

      • Region Server 构建RegionScanner准备进行检索    
      • 有多少个列簇就构建多少个StoreScanner,用于对确定的列簇数据检索     

       

 

 

  2.HBase数据存取优化

    (1)存储优化

    (2)检索(获取)优化

 

  3.HBase数据存取api介绍

    (1)存储数据api介绍

 

posted @ 2018-08-30 18:06  无畏迎风  阅读(2896)  评论(0)    收藏  举报