HBase架构简谈

作者的思考,建议结合《HBase权威指南》第8章一起看。。。

1.HBase是如何保证快速读取 以支持实时数据开发的(相比Hive和hadoop的批处理)?

HBase在HDFS上磁盘数据结构为LSM(可以看成B树),按RowKey有序,复杂度为log(n)(当然与树节点元素数量有关):可以理解为对RowKey进行查询比传统数据库还快(如果没有对索引字段where查询)。

关联知识:

数据库原理索引:数据磁盘寻道、B树索引结构

HBase的Region:HBase的一张表可以分成多个Region,每个Region负责一段顺序RowKey(如:row1-row100在region1上,row101-row200在region2上。。。),这样无论数据如何横向扩展,每个region管理的数据都只有那么多,不会因为树深度的增加而增加访问时间。

 

2.HBase是如何保证数据安全性的?(当然是日志系统

数据写入内存(memstore)前,先写入日志(HLog),当机器宕机也可以根据日志进行数据恢复。

关联知识:

HLog(一个服务器一个日志):写入的数据顺序存储在HLog文件上(已经在HDFS上保持了)。HRegionServer上可能有很多表,很多region,宕机了日志是如何被利用的呢?日志上还没有存到region磁盘上的数据分发到各自的region上进行恢复(都给到位了,直接存就行了)。

memstore:所有memstore上的数据加起来和HLog上没有保存到region磁盘上的数据相等(相当于一摸一样的数据)。如果memstore上的数据保存到region磁盘上去了,HLog上的数据不就没用了么?数据已经持久化了,当然没用了,就可以根据保存到磁盘上的数据的最大时间戳来判断,日志上小于这个时间戳的数据都已经保存了。

这里引发了我的疑问:1.一个memstore达到flush数据刷写要求了,难道一个HRegionServer上所有的memstore都要同时刷写么,不然HLog还选出这个memstore上的数据标记么?

关于疑问的推论:是否是每个region中的每个store都记录一个最大时间戳,HLog中记录的关于一个region中的一个store的数据,如果时间戳小于记录的最大时间戳,那说明数据已经被处理了,数据恢复时就可以过滤掉。

 

3.HBase是如何保证数据快速写入的?(直接内存当然很快)

顺序写入到HLog上后直接写入内存,逻辑上数据就已经成功写入了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值