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. RegionServerRegion进行拆分  
      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 sectionRegionServer启动时加载,主要是HFile的元数据
    • TrailerHFile的基本信息,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 PutDelete)数据,提交到RegionServer     

       

      服务器:HBase Server

      • Region Server 去获取行锁,Region更新共享锁    
      • HLogWAL    
      • 写缓存,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  无畏迎风  阅读(2851)  评论(0编辑  收藏  举报