美文网首页我爱编程
HBase架构与原理

HBase架构与原理

作者: Bill_Lin | 来源:发表于2018-03-16 09:51 被阅读49次

    HBASE基本概念

    Hbase是构建在HDFS上的分布式列存储系统,用于海量结构化数据存储

    为什么需要HBASE?我们来了解下HDFS作为基本存储所存在的问题:

    1. 不支持数据随机查找
    2. 不适合增量数据处理(新来的一批数据不能单独处理,需要统一跟旧数据再处理一遍)
    3. 不支持数据更新(更新某行数据,某个字段,只支持整行数据的扫描,文件追加等)

    而HBase的基本特点如下

    • 规模大:一个表可以有数十亿行,上百万的列
    • 无固定模式:每行都有个可按字典排序的主键row key和任意多的列column family。列可以根据需要来动态的增加,同一张表中不同行可以有截然不同的列。
    • 面向列:面向列存储和权限控制,每个列作为一个单位进行存储,列独立检索。
    • 空间稀疏:某行对应的某个列为空时,不会占用存储空间,因此表格可以设计得很稀疏
    • 数据多版本:每个列单元中的数据可以有多个版本,默认下版本号是数据插入单元格的时间戳
    • 数据类型单一:hbase中的数据都是字符串,没有多种类型。

    因而衍生出了Hbase等列式存储数据库,来应对不同的应用场景。

    我们对行存储与列存储做下对比,如下图:

    image.png

    可以看到,列式存储在应对高并发量的简单读写操作时,将会大大节省建立索引或者无索引时的按行查找时间与存储空间。并且数据类型的一致也保证了压缩的有效性

    下面,看一下数据在HBASE中的具体存储方式

    每一行数据有两个大的单元,一个主键row key一个data,data单元中有若干个列族column families,每个column families有若干个column列字段。可以看到,有些字段懈怠了相同的属性名,因为字段携带了上面所提到的不同版本号——时间戳,代表了该字段不同时间的value。

    image.png

    Hbase基本概念

    下面介绍下Hbase的存储字段

    • row key

    是表中每条记录的主键,方便快速查找,以byte array的形式存储

    • column family

    拥有一个String类型的名称,包含了一个或者多个相关的列

    • column

    从属于某一个column family,包含在某一列中。格式为 column familyName:columnName

    • version number

    每个rowkey拥有多个version number,默认值为系统的时间戳,类型为long。无需以递增的顺序插入,可由用户提供

    • value

    同样以byte array字节数组形式存储

    其中,hbase的所有操作是基于rowkey的,支持增删查改操作,如单行的put,get,scan,多行的scan,multiput等。若需要join操作,则需使用MR来解决

    HBASE为每个值维护了多级的索引<key,column family,column name,timestamp>。每个column family存储在HDFS上一个单独的文件中,key和version number会冗余地在每个column family中存储一份,其中空值不会被存储。

    HBase物理存储

    HBase table的行按照row key的字典序排列,在行方向上分割为多个region。region随着数据量增多,达到一个阈值时会切分为两个region。

    其中,region是HBASE中分布式存储和负载均衡的最小单元,不同region分配到不同的region Server中,方便进行并行的处理。

    虽然region是作为数据切分和迁移时的最小单元,但实际存储数据的最小单元是store。每个region由一个或多个store组成,每个store保存一个columns family。每个store由一个memstore和0至多个storeFile组成,menstore存储在内存中,storeFile存储在HDFS上。当menstore存满时,将数据溢出到storefile中。

    image.png

    下面,看一下hbase与HDFS结合的一个经典架构图。client可以与regionServer直接进行通信读写,并间接的与master通信。这样保证了master挂掉时,用户仍然可以进行常规的读写操作,但是需要一定时间等待master的恢复,才能够完成如某个region Server挂掉,将数据迁移等切分、负载均衡的操作。同时,失效服务器上“预写”日志(下面提到的write-ahead-log机制)由master进行分割并派送给新的regionserver

    HBASE架构

    HBASE基本组件

    HBase架构中涉及的各个组件与作用如下图:

    HBASE基本组件
    • write-ahead-log机制

    是一种数据的预写操作。hbase在将数据存入region前,先将数据存入log中,方便在数据写入失败时可以从log进行恢复。

    • region定位

    那么,查找数据时是如何定位到不同节点上的region呢?

    首先,zookeeper到唯一存储在某个region上的root表查找对应meta表的位置,然后在指定region上找到meta表以及regionserver的服务器地址后,再查找用户数据表的具体region位置。

    每次查找访问都会进行如此麻烦的四个步骤吗?为了避免这样低效的操作,第一次查找后会将用户表的地址信息缓存到本地,如同将常用的地址放到Cache中一样,以方便下次的访问。

    应用场景

    最后,说一下HBase适用的一些场景

    1. 对数据进行随机的读、写操作
    2. 高并发操作,如每秒PB级别数据的上千次操作
    3. 读写访问为简单操作

    在Facebook中的应用-消息系统

    1. 聊天系统:一个较小的临时数据集,经常变化
    2. 邮件系统:一个不断增加的数据集,但旧内容很少访问

    总结:HBASE在互联网公司的后台信息存储中应用很多,正是它的出现使得hadoop生态系统服务更加全面,值得笔者继续深入学习。

    相关文章

      网友评论

        本文标题:HBase架构与原理

        本文链接:https://www.haomeiwen.com/subject/vdhlqftx.html