首页 > 其他分享 >hbase结构简介

hbase结构简介

时间:2024-03-01 15:34:07浏览次数:26  
标签:列族 简介 region 写入 hbase 结构 数据 hfile

Hbase结构图

HBase 整体结构

HBase系统架构

hmaster负责给 regionserver分配region,region处理具体的数据存储和查找,zk是一个注册中心,hmaster通过zk 感知regionserver存活与否。客户端是通过zk取到hmater的位置,然后取到位于namespace下面的mate表里面的region分区信息才能知道对应得rowkey应该去哪里取得。

Hbase的数据是已hfile的形式存在hdfs上

hbase一个列族对应一个store,同一个列族的数据存在存一起的。看下图,hfile里面最小的数据单元不是行,而是cell,相当于一行里面的一个格子。

c885f61586e449a497a505b0eee82642

这个cell的结构大概是这样的
key=rowKey+列族+列+时间戳+操作类型
操作类型指的是添加和删除,和时间戳一起控制版本

key长度+value长度+row长度+rowKey+列族长度+列族+列+时间戳+操作类型+值

在这里插入图片描述

其实看到这里我们可以知道hbase存的数据和b+tree的行结构不一样,b+tree同一行的数据都是存一起的,hbase,同一列族的数据是在一起的,不同列族是有不同store 管理的存在不同地方。而且hbase是一个cell一个cell的存储数据。

总的来说,一个表的数据通过根据rowKey的字典顺序拆分成不同的region。不同region由不同regionServer管理。同一个region的数据又根据列族分成不同的store。store分成两部分一部分位于内存,叫做memstore,另外一部分位于磁盘。memstore存储的写入但是还有落盘的数据。store里面用hfile的形式存放数据(一个一个小cell),在一个hfile上有存放数据rowkey的最大值和最小值,方便能快速的确认是否有数据。即便rowkey在指定范围,也可以通过布隆过滤器进一步排斥不存在的rowkey。剩下的才会正在在hfile 这块有序存储中查询。

查询流程大概是这样:

rowKey-->定位到region-->去指定regionServer-->根据查询列族去指定列族的store-->根据hfile上面的rowKey范围和hfile上的布隆过滤器确定哪些hfile应该被查找-->在指定几个hfile查询数据。

位于不同region的数据,和同一个region的不同store的数据,甚至不同 hfile 的数据是可以并发查询的。

LSM结构

LSM树(Log-Structured-Merge-Tree)

hbase用的LSM结构,这种结构在写入数据的时候直接写入内存,然后当数据积累到一定大小才或者超过指定,会写入磁盘。为了保证数据的一致性,写入内存前还会写落盘的日志(WAL). WAL 是 write ahead log 的缩写,也就是预写日志。meetable是内存里面的数据,可变而且有序,sstable是硬盘上的数据有序,且不可被修改,如果要修改数据也是通过多条记录合并出来的结果,比如写入1,然后修改成2,实际是3条数据,并且时间戳不同。

第一条:时间1,操作是put,数据1。
第二条:时间2,操作delte,数据空。
第三条:时间3,操作put,数据2。
这三条数据可能可能位于不同的 table上。memtable和sstable 就是 hbase里面的 hfile。

sstable的文件不能修改,但是和按照一定规则合并,合并的时候会删除会删除一些多余的修改记录.比如上面的修改过程只会保留第三条。

读取数据的时候同样要考虑 memtable里面的数据和 sstable里面的数据。因为有版本的存在,所以即便memtable里面有数据,还是要看sstable里面有没有,比如之前存的数据设置时间戳可能是100年以后,这样的话它即便最先添加,也是最新数据。

img

mysql,es,hbase写日志文件,写缓存对比

几乎所有软件保证数据完整性都是通过一边写数据一边写日志来做到的,写数据因为要维持结构所以比只是追加的日志慢。我们来看看几种软件保持数据完整性的做法差异。

  • mysql的不同点
    mysql和另外两个最大的差异在于写入数据是直接修改的原数据,不是通过追加的方式,所以他的修改是随机写的概率比较高。

  • es和hbase写数据的相同点
    es和hbase都是追加新记录的方式来覆盖老数据,实际老数据还在,写入位置顺序写入的概率比较高。

  • es和hbase写数据的不同点
    hbase有类似es内存bufer的结构,在habase里面叫做memstore,他们都是还没有落盘的数据,但是已经有日志信息保证了他们的完整性。

    es的写buffer的数据是查询不到的,hbase的memstore里面的数据是可以查询到的。

    hbase数据持久化是直接通过网卡写入到hdfs,在regionServer这边是不存在oscache中间状态的。es是内存缓存一部分数据,然后自己写磁盘,有oscahce中间状态存在。加上磁盘状态,数据有三种状态。

标签:列族,简介,region,写入,hbase,结构,数据,hfile
From: https://www.cnblogs.com/cxygg/p/18047178

相关文章

  • aardio调用c语言dll动态库传结构体详细教程
    安装mingw32下载安装配置官方地址下载安装:https://sourceforge.net/projects/mingw/安装方法:https://blog.csdn.net/HandsomeHong/article/details/120803368↑记得最后要添加一下环境变量mingw64编译32位失败,待继续研究。https://zhuanlan.zhihu.com/p/413181676#安装完成......
  • 基础数据结构->set&&map
    set&&mapBEGIN:惜墨如金set用法#include<bits/stdc++.h>usingnamespacestd;voidthe_map(){map<string,int>ds;stringkis="kis";ds[kis]=2;ds["a+a"]=3;ds["b+"]=4;ds["c-"]=5;//这样就可将这个“数......
  • Java流程控制05:Switch选择结构
    Switch多选择结构1.多选择结构还有一个实现方式就是switchcase语句2. switchcase语句判断一个变量与一系列值中某个值是否相等,每个值称为一个分支。3.switch语句中的变量类型可以是:3.1byte、short、int或者char3.2从JavaSE7开始......
  • Redis基础数据结构
    简单动态字符串SDS在Redis里面字符串随处可见比如//设置一个(key,value)为msg和helloworld的键值对setmsg"helloworld"在这里,msg和helloworld都是一个字符串.Redis自己构建了一个名为SDS(SimpleDynamicString简单动态字符串)的类,用于作为Redis底层字符串的默认实......
  • 安全测试简介
    安全测试:对资产进行一个较为完整的安全评估,web渗透测试,app渗透测试,操作系统渗透测试,社会工程学;主要工作是为了检测自家公司应用的安全性;web渗透测试:对网站应用的安全测试,目标不仅是我们能看到的具有页面的网站,也包括接口和一些比较抽象的功能;app渗透测试:主要是对app本身的安全性测......
  • Java流程控制04:if选择结构
    1.选择结构1.1if单选则结构1.1.1需要判断一个东西是否可行,然后再去执行,这样一个过程在程序中用if语句来表示1.1.2语法:if(布尔表达式){//如果布尔表达式为true将执行的语句}  1.2if......
  • Java流程控制03:顺序结构
    顺序结构:1.java的基本结构就是顺序结构,除非特别指明,否则就按照顺序一句一句执行。2.顺序结构时最简单的算法结构。 3.语句与语句之间,框与框之间是按从上到下的顺序进行的,它是由若干个一次执行的处理步骤组成的,它是任何一个算法都离不开的一种基本算法结构......
  • MutationObserver监听DOM结构变化
    前面有IntersectionObserver观察器实现页面懒加载的功能,原理就是观察dom是否进入视口。那么如果不管是否可见或者要实现随时监听,则需要使用MutationObserver。示例代码:1filterObserve:function(_id){2if($("#"+_id+"formt-form-item").length<5)returnnull......
  • 内存与垃圾回收篇之(一)JVM与Java体系结构
    JVM与Java体系结构1.前言JVM拥有当前最前沿、最成熟的垃圾回收算法JIT:即时编译器AOT:提前编译器JVM:代码托管技术拓展:前端编译器:负责把Java文件编译成Class文件,如Sun的Javac;后端运行期编译器(JIT编译器):负责把Class文件的字节码转换成机器码,如HotSpot的C1,C2编译器;静态提前......
  • 知识结构大纲
    基础知识正则表达式工具插件推荐Linux配置内核解释器网络命令netstateab压测DockerDocker基础使用[1]dockerswarm添加portainer[2]DockerCompose和dockerfile的区别和联系[3]多线程基础知识整理一基础知识整理二多线程设计模式JVM从Jmeter开始学习......