文章目录
初入HBase
首先肯定是 ①什么是HBase?,②我们用这个东西来干嘛?③这个东西的优缺点又是啥?
① HBase 是以hdfs为数据存储,一个面向列式存储的分布式 可扩展的非关系型(NoSQL)数据库 。
② HBase非常适合于对海量数据进行实时随机读写
海量数据存储:
上百亿行 x 上百万列 并没有列的限制
当表非常大的时候才能发挥这个作用, 最多百万行的话,没有必要放入hbase 中
准实时查询:
百亿行 x 百万列,在百毫秒以内
③
优点:
容量大:
传统关系型数据库,单表不会超过五百万,超过要做分表分库,不会超过30列
Hbase单表可以有百亿行、百万列,数据矩阵横向和纵向两个维度所支持的数据量级都非常具有弹性
面向列:
面向列的存储和权限控制,并支持独立检索,可以动态增加列,即可单独对列进行各方面的操作
列式存储,其数据在表中是按照某列存储的,这样在查询只需要少数几个字段的时候,能大大减少读取的数量
多版本:
Hbase的每一个列的数据存储有多个Version,比如住址列,可能有多个变更,所以该列可以有多个version
稀疏性:
为空的列并不占用存储空间,表可以设计的非常稀疏
拓展性:
底层依赖HDFS,当磁盘空间不足的时候,只需要动态增加datanode节点服务(机器)就可以了
高可靠性:
WAL机制,保证数据写入的时候不会因为集群异常而导致写入数据丢失Replication机制,保证了在集群出现严重的问题时候,数据不会发生丢失或者损坏
Hbase底层使用HDFS,本身也有备份
缺点
数据分析是HBase的弱项,因为它基本不支持表的关联,group by或order by的实现非常复杂。
数据模型
(1)Name Space: 命名空间 相当于Mysql的数据库(database)
(2)Table:HBase 定义表时只需要声明列族即可,不需 要声明具体的列。因为数据存储时稀疏的,所有往 HBase写入数据时,字段可以动态、按需指定
(3)Row:每行数据都由一个 RowKey 和多个 Column(列)组成,数据是按照 RowKey 的字典顺序存储的,
并且查询数据时只能根据 RowKey 进行检索,所以 RowKey 的设计十分重要
(4)Column:HBase 中的每个列都由 Column Family(列族)和 Column Qualifier(列限定符)进行限定
(5)Time Stamp :用于标识数据的不同版本(version),每条数据写入时,系统会自动为其加上该字段,其值为写入 HBase 的时间
(6)由{rowkey, column Family:column Qualifier, timestamp} 唯一确定的单元。cell 中的数据全部是字节码形式存贮。
HBase的架构
HBase 逻辑结构
HBase 物理存储结构
HBase 基本架构
Backup Master103 是备用 Master,也是可靠性的体现
架构角色:
1)Master
实现类为 HMaster,负责监控集群中所有的 RegionServer 实例。主要作用如下:
(1)管理元数据表格 hbase:meta,接收用户对表格创建修改删除的命令并执行
(2)监控 region 是否需要进行负载均衡,故障转移和 region 的拆分。
通过启动多个后台线程监控实现上述功能:
①LoadBalancer 负载均衡器
周期性监控 region 分布在 regionServer 上面是否均衡,由参数 hbase.balancer.period 控制周期时间,默认 5 分钟。
②CatalogJanitor 元数据管理器
定期检查和清理 hbase:meta 中的数据。meta 表内容在进阶中介绍。
③MasterProcWAL master 预写日志处理器
把 master 需要执行的任务记录到预写日志 WAL 中,如果 master 宕机,让 backupMaster 读取日志继续干。
2)Region Server
Region Server 实现类为 HRegionServer,主要作用如下:
(1)负责数据 cell 的处理,例如写入数据 put,查询数据 get 等
(2)拆分合并 region 的实际执行者,有 master 监控,有 regionServer 执行。
3)Zookeeper
HBase 通过 Zookeeper 来做 master 的高可用、记录 RegionServer 的部署信息、并且存储有 meta 表的位置信息。
HBase 对于数据的读写操作时直接访问 Zookeeper 的,在 2.3 版本推出 Master Registry模式,客户端可以直接访问 master。使用此功能,会加大对 master 的压力,减轻对 Zookeeper 的压力。
4)HDFS
HDFS 为 Hbase 提供最终的底层数据存储服务,同时为 HBase 提供高容错的支持。
HBase 进阶
Master 架构
RegionServer架构
1)MemStore
写缓存,由于HFile中的数据要求是有序的,所以数据是先存储在MemStore中,排好序后,等到达刷写时机才会刷写到HFile,每次刷写都会形成一个新的HFile,写入到对应的文件夹store中。
2)WAL
由于数据要经MemStore排序后才能刷写到HFile,但把数据保存在内存中会有很高的概率导致数据丢失,为了解决这个问题,数据会先写在一个叫做Write-Ahead logfile的文件中,然后再写入MemStore中。所以在系统出现故障的时候,数据可以通过这个日志文件重建。
读缓存,每次查询出的数据会缓存在BlockCache中,方便下次查询。
写流程
读流程
(1)HFile结构
在了解读流程之前,需要先知道读取的数据是什么样子的。
HFile是存储在HDFS上面每一个store文件夹下实际存储数据的文件。里面存储多种内容。包括数据本身(keyValue键值对)、元数据记录、文件信息、数据索引、元数据索引和一个固定长度的尾部信息(记录文件的修改情况)。
键值对按照块大小(默认64K)保存在文件中,数据索引按照块创建,块越多,索引越大。每一个HFile还会维护一个布隆过滤器(就像是一个很大的地图,文件中每有一种key,就在对应的位置标记,读取时可以大致判断要get的key是否存在HFile中)。
由于HFile存储经过序列化,所以无法直接查看。可以通过HBase提供的命令来查看存储在HDFS上面的HFile元数据内容。
(2)具体过程
在这里插入图片描述