Hbase的架构及读写流程

Hbase:

     是一个构建在Hdfs基础之上的非关系型数据库。**
     是一个高可靠、高性能、面向列、可伸缩的分布式存储系统,目标是存储并计算大型的数据,具体来说就是在非常普通的硬件配置,就能够处理成千上万的行和列组成的大型数据。
     关系型数据库和非关系型数库的明显区别:Nosql往往使用api操作,关系型数据习惯与使用sql语句操作
特点:
        1.海量存储 -->基于Hdfs
        2.列式存储
        3.极易扩展
             (1)添加datanode机器,进行存储层扩容,提升Hbase的数据存储能力和提升后端存储的读写能力;
             (2)添加RegionServer机器,提升Hbase上层的处理能力,提升Hbase服务更多Region的能力。
        4.高并发
        5.稀疏
             由于采取列式存储,某一列没有数据不会占有磁盘空间,所有说是稀疏的


Hbase的架构:
        Hbase的相关组件
            client:包含访问Hbase的接口,还维护对应的cache来加速对Hbase的访问(如缓存.META元数据信息)
            Zookeeper:维护master的高可用,RegionServer的监控,元数据的入口以及集群配置的维护
            Hmaster:为RegionServer分配Region、维护集群的负载均衡、元数据信息、将失效的Region分配到正常的RegionServer上、当RegionServer失效,协调对应Hlog的拆分
            HRegionServer:对接用户的读写请求、管理master为其分配的Region、与HDFS交互,将数据存储到HDFS上、负责Region变大后的拆分以及StoreFile的合并工作
            HDFS:提供元数据和表数据的底层分布式存储服务、多副本保证可靠性和高可用性
**其他组件:**
            Write-Ahead logs(WAL,HLOG&edits日志)
            Region:Hbase表的分片
            Store:对应Hbase中的一个列族
            MemStore:内存存储
            StoreFile/HFile:不同时期对实际存储文件的不同叫法
            Hbase中的角色:

Hmaster:
    1.监控RegionServer
    2.处理RegionServer故障转移
    3.处理元数据的变更
    4.处理region的分配或转移
    5.在空闲时间进行数据的负载均衡
    6.通过Zookeeper发布元数据的位置给客户端
RegionServer:
    1.负责存储HBase的实际数据
    2.处理分配给它的Region
    3.刷新缓存到HDFS
    4.维护Hlog(每个regionserver都有一个Hlog)
    5.执行压缩
    6.负责处理Region分片(自动分片)
Hbase的读写原理


读流程:
     1.client先访问zookeeper,得到zookeeper中保存的meta表所在的RegionServer位置信息
     2.访问从zookeeper得到的保存meta表的RegionServer从而获取meta表的信息
     3.client根据namespace、表名和rowkey在meta表中找到对应的Region信息
     4.找到这个Region对应的RegionsServer
     5.访问这个RegionServer,找到对应的region
     6.在Region查找数据的顺序 MemStore-->BlockCache-->StoreFile(前面没有再到后面找,提高读取的效率)
     7.如果是从StoreFile读取的数据,首先写入BlockCache中然后在返回给客户端


写流程:
      1.client先访问zookeeper,从meta表获取对应的region信息,然后找到meta表的数据
      2.根据namespace、表名和rowkey在meta表的数据找到写入数据对应的region信息
      3.找到对应的RegionServer和和要写入的region
      4.将数据先写入HLog(WAL,write ahead log),然后在写入MemStore。为了数据的持久化和恢复

数据flush过程:
      当MemStore数据达到阈值(默认128M),将数据刷新到磁盘,清空内存中的数据,同时删除HLog中的历史数据
      1.hbase.hregion.memstore.flush.size: 针对region级别,当一个region内地所有memstore的总大小达到阈值的时候,所有memstore中的数据溢写到磁盘
      2.hbase.regionserver.global.memstore.size:针对RegionServer级别,当一个RegionServer内的所有memstore总大小达到阈值,当前regionserver内所有store的memstore全部flush
数据合并过程:  
      1.当一个store(也就是一个列组)中的Hfile的数据快达到4快,HMaster将数据块加载到本地,进行合并;
      2.当合并的数据超过256M,进行拆分,将拆分后的region分配给不同的HRegionServer管理(一个store列族数据超过256M会对整个region进行切分,此处可以预分区)
      3.自动切分region
     4.当HRegionServer宕机后,将HRegionServer上的HLog进行查分,然后分配给不同的HregionServer加载,修改.META

猜你喜欢

转载自blog.csdn.net/jiezou12138/article/details/88677006