大话hbase


两周没有写东西了,因为不知道传递什么东西好,今天才知道这里大部分人对大数据基础组件都是很了解,所以这周开始大白话基础组件。

大话hbase:

功能1:基于某一条索引快速定位该条数据。
其他功能:其他功能都是基于功能1之上。为了功能而功能。比如统计所有的条数counter。比如查询某一段时间断范围的值等等。都是基于上面的功能之上做的增强。


我们谈谈设计:定位也就是查找。怎么才能快速定位。

1、排序和查找

功能1简化一下就是快速查找。如果让你实现一个快速查找你会怎么办。

   1)排序
   2)二分查找

所有hbase
1) 排序
2)查找(hbase不是使用二分查找)

问题1)怎么实现排序
    ->>> 不管怎么样,不是算法中的冒泡排序和交换排序。
    ->>> 采用跳表(B+数)来实现,每次写入的数据自动插入内存,形成有序。即写入即有序

问题2)为什么不用二分查找
    -->>>>  二分查找的前提是需要知道中点位置。只适合数组。数据库的查找一般采用B+数:hbase也是,如图。如果数据在25-50之间就可以将第二块读入内存中。然后遍历。(hbase中每个区间64K)


解决插入查找后,你可以设计个简单的kv内存数据库了。数据不可能一直在内存中,必然会写到文件系统中。

2、时间戳

  为什么只是内存数据库? 如果数据在文件系统中,你怎么实现更新,怎么插入,怎么删除。
     》》》  读入内存,修改,写回文件系统????  不要天真了, 磁盘IO吃不消的,

     文件系统最要命的是只支持尾加,不支持修改和随机插入,也不支持随机删除。也不可能每次都将数据从文件系统中读入内存。然后执行动作后写回文件系统。

主要解决一下几个问题
   1)查找
   2)更新
   3)删除

为了解决这个问题,引入性能定义。
memstore:内存中存储数据
Storefile:文件系统中的文件,命名为hfile。
时间戳:每条数据写入时间。

写入流程:
1、数据首先写入内存memstore,形成有序。
2、达到一定大小后(128M)持久化到磁盘。该过程叫做flush流程。
3、每条数据都有时间戳。

更新:
按照写入流程,写入一条数据。

删除流程
按写入流程,写入一条数据,并标记为delete

查找:
每个hfile构建一个scanner。一个内存构建一个scannner。内存scanner和文件scanner没有任何区别。
分别从每个scanner拿到你要查找的数据。然后汇总。按最新时间戳返回。
如果最新时间戳数据有delete标记。表示已经删除。删除功能实现
每次都返回最新时间戳的数据,更新功能实现

恭喜你能完成基于文件系统的kv数据了。

3、WAL
上面的系统还没有可靠性,先写入内存部分数据,存在数据丢失风险。因此需要引入WAL。即先写日志系统。也就是写入内存的同时先写入文件系统里。

问题1)都已经写入到文件系统了,还写内存是做啥事?  

如果不懂欢迎给我留言。

解决后丢数据风险后,一台单机的hbase你可以实现了。

4、region

上面都是基于单机的实现。怎么实现集群。首先需要将数据分块。
分块要求
   -> 块之间没有重叠
   -> 能够通过key快速找到所在块。

问题1)怎么分块
  1) hash   redis采用的方法
  2)按顺序分段。   hbase采用的方法。
hash对于库容有个严重缺点。所以hbase采用顺序分段。

hbase的数据采用字典排序。所以只需要将前面字段进行切分即可。
 如数据1-99 ,如果划分3个区间,那么可以是1-3,3-7,7-99.

 问题2)数据40落在那个区间。

region:即区间,也就是表的某一段数据。

5、regionserver
有了region之后,就必然需要机器管理这些region,命名为RegionServer

6、HMaster
RegionServer也需要被管理。其管理者就是HMaster。HMaster存在单点问题,所以需要主备hmaster。

7、集群的几个问题
如果自己构建系统,需要完成
1)hmaster主备之间的选主。
2)hmaster接受RegionServer的注册,心跳。当RegionServer失败之后,让其他RegionServer接管其上Region等。


如果以上都完成,,是不是一个Hbase就ok了呢?其实不然。

回到最开始的问题,hbase是提供查找的工具。请问现在怎么查找??????    你会发现无从下手。

8、meta表,zookeeper。

首先你需要知道数据在哪台机器,同时你需要自动数据在哪个Region。然后才能有该Region接管你的请求。返回结果给你。
因此引入了系统表meta

meta表存储的是Region的位置信息。
meta表的位置记录在zk里面。

所以查询流程问题
1)访问zk,找到meta表所在的机器
2)更加具体table和请求,从meta表里找到对应的region,和RegionServer信息
3)和RegionServer请求,有该RegionServer上的region进行查询。
4)查询时分别从memstore和hfile找到对应的数据,然后返回最新结果。

通过简单的介绍,你基本已经了解的hbase的大致过程。细节上无法在短时间介绍清除。需要自行研究。
可以参考我早期的博客。那时候刚研究内核,比较水。
https://blog.csdn.net/chenfenggang/article/category/6242829

   

   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值