HBase总结

HBase概述:是一个高可靠、高性能、面向列、可伸缩的分布式存储系统。可以存储半结构化、非结构化的数据。利用Zookeeper作为协调工具,以HDFS作为文件存储系统,以mapReduce来处理HDFS中的海量数据。
HBase的逻辑结构:行键(RoeKey):相当于HBase表中的主键,所有数据都要按照行键的字典顺序排序后存储。对HBase表中的数据的查询,有三种方式:根据指定行键查询 根据指定行键的范围查询 全表扫描查询
列族(ColumnFamily):列族是HBase表从纵向来切分的逻辑结构,一个列族包含若干列,是HBase元数据的一部分
列:一个列族中包含多个列,在创建HBase表时不需要创建列,因为它可以在表创建之后动态的添加,不属于元数据的一部分。
单元格和时间戳:在HBase表中,行和列交汇得到HBase中的一个存储单元,在这个存储单元中可以存储数据的多个版本,这些版本通过时间戳来区分。通过行键、列族、列、时间戳确定的一个最小的存储数据的单元,叫做单元格。单元格中的数据都是以二进制形式存储的。
HBase的核心组件:HRegion:HBase起初只有一个HRegion保存数据,随着数据写入,HRegion越来越大,达到一定的阈值后自动分裂为两个HRegion,随着数据写入,HRegion会越越多,Hbase表中的数据被划分为若干个Hregion进行管理。
HRegion会分布式的存放在集群的HregionServer服务器中,从而实现分布式存储和负载均衡。
HRegion内部会有若干个store,Store的个数取决于列族的个数,一个Store内部又有一个memStore和若干个storeFile.storeFile本质上就是HDFS中的HFile文件。
HBase的写数据流程:当客户端联系HBase要写入一条数据时,根据表名和行键确定要操作的是哪个Hregion,找到存储着该Hregion的HregionServer服务器进行操作。根据要操作的列族找到对应的Store,向Store中的memStore中写入文件,并且在HLog中记录操作日志。之后返回写入成功,写入过程是基于内存的,性能好。

  1. 如果在写入时memStore满了怎么办?
    如果memStore被写满时。Store会自动又生成一个memStore继续工作。这个时候HBase会启动一个独立的线程,将满了的memStroe中的数据写入到HDFS中的HFile中,将数据持久化。
    在不停的产生HFile的过程中,同一个Store产生多个HFile中可能存在对同一个数据的不同的版本,其中有失效的数据,但是HDFS只能一次写入多次读取不能删除和修改,垃圾无法清除,降低查询性能。这个时候,HBase触发HFile的合并操作,将同一个Store产生的HFile合并成一个HFile,期间进行垃圾清理。当不停的合并达到一定大小的时候Hfile会拆分成若干个小Hfile,防止Hfile过大。
  2. 断电memStore丢失数据怎么办?
    HRegionServer中存在名为HLog的日志文件,在向memStore中写入数据的同时,数据需要写入HLog中记录操作日志,而在memStore满了溢写到HFile中完成之后,HBase会将把最后一条持久化到HDFS中的日志的编号记录到Zookeeper中的redo point。一旦数据丢失,只需要找到Zookeeper中找到最后持久化日志的编号,从HLog中将这个编号之后的数据恢复到内存中就可以找回所有丢失的数据。
    HBase的读流程:当客户端联系Hbase表示要读取某一张表时,HBase根据表和行键确定出HRegion,然后找到存储该HRegion的HRegionServer。根据要查找的列族,确定出要查找的Store,首先查看memStore中是否有要查找的数据,如果有,直接返回查询结果,如果在memStore中没有要查找的数据,那么查询该Store对应的所有的StoreFile.
    在这个过程中,解析StoreFile,先读取StoreFile中的Trailer块,找到DataBlockIndex,根据索引判断要找的数据在当前的StoreFile中是否存在,不存在直接返回空,存在的话根据索引快速找到对应的DataBlocks中的DataBlock返回。
    多个StoreFile可能返回多个DataBlock,之后在内存中将这些DataBlock信息合并完成查询。
    HBase的HRegion的寻址:在HBase表中有一张特殊的Hbase:meta表,表中存放着HBase的元数据信息(HBase中有哪些表,表中有哪些HRegion,Hregion分布在哪个HRegionServer中)。 在meta表中,只有一个HRegion,这个Hregion存放在某一个HRegionServer中,并且会将这个持有meta表的HregionServer的地址存放在Zookeeper中的meta-region-server节点下。
    每次读写时,先访问Zookeeper中的meta-region-server的值,然后根据值找到Meta表存储的HRegionServer,得到Meta表唯一个HRegion。根据该Hregion中的表和行键找到真正操作的HRegionServer.
    第二次之后,会将访问的地址存储在本地缓存中,下次操作不需要在来一次这样的寻址,提升性能。
    三种常见的存储系统:
  3. hash存储:hash存储是引擎,是哈希表的持久化实现,支持增删改以及随机读取操作。但是不支持顺序扫描
    如果不需要有序的数据遍历,哈希表是最好的选择。
  4. B树存储:是B树的持久化实现,不仅支持增删改读操作,还支持顺序扫描。
  5. LSM树存储:LSM树的存储引擎和B树存储事务引擎一样,同样支持增删改读操作和顺序扫描。LSM树读性能低,写性能高。

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值