您好,登录后才能下订单哦!
这篇文章给大家分享的是有关HBase体系结构是怎么样的的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
HBase是Apache hadoop集群中常用的非关系型数据,它是一种开源的、分布式的、多版本、面向列存储的数据库。
它的源码在 https://github.com/apache/hbase 上,妥妥的开源啊。。。
分布式是因为它的数据最后存储在HDFS上,所以它继承了hadoop分布式的优良传统(不知道能否这么理解)。
多版本就不多介绍了,版本更新快呗。。。
面向列的存储是它与传统关系型数据库最大的区别之一,它是根据rowKey、columnfamily、quaifer、timestamp(如果你有多版本的话)得到你最后的value值。。这个咱们以后再介绍,今天主要想写的是hbase的体系结构。
hbase的服务器体系结构也是主从服务器架构,分为HBase Master server和HRegionServers。
HBase Master server :主服务器,主要负责管理HRegionServers,个人理解:只是关于HRegionServer的决策权都是由它完成的。
具体的功能有:
1.用户对Table的增、删、改、查。
2。HRegionServer的负载均衡,调整HRegion的分布,像一个HRegionserver挂了,master会将挂了的HRegionserver上面的HRegion重新拿到,标上未分配,然后再分配一个活的HRegionServer,当然,它也得先询问下这个HRegionServer要不要了。。
3.在HRegion分裂后,负责新的HRegion的分配。 默认的HRegion的大小为64M,当超过这个大小的时候,它会自动分裂成两个,并且这个拆分速度很快,因为它在拆分的时候先会创建两个HRegion,而这两个HRegion先会保存对原HRegion的引用,当这两个新的HRegion数据拆分完成后,再将此引用去掉,并删除原HRegion。现在拆分完了,但是HRegion不是拆分完了就没事干了,它得找个HRegionServer管理啊,so,又得HBase Master Server分配了,同上~~
4.HRegionServer停机后,负责失效的HRegionServer上的HRegion分配。服务挂了,但是HRegion没挂啊,HRegion可以说是一个存储文件夹,一个服务挂了,找头(hbase master server)再找一个呗,然后继续做着保存或查询时被提取数据的工作。
HRegionServer的构成:
HRegionServer包含了一个HLog部分和HRegion部分(多个HRegion)。。
ps:这地方可能有些异议,因为网上一些图片显示的都是HRegion里才包含HLog,网上的资料比较老,所以这里我参考《hadoop实战》中的资料,它的版本是0.92,可能与现在的0.96版本还算比较接近的。。
HLog部分保存着用户操作hbase的日志(不排除也包含master管理hregion的操作,明天看一下),用户的操作都会先记录到HLog中,然后再保存到HRegion中。
而HRegion其实就是存储的实际数据了。它包含了多个HStore。
HStore:每一个列族都会形成一个HStore,它又由MemStore和多个HFile组成。
MemStore驻留在内存中,当数据保存时,数据会先存储到MemStore中,然后根据用户设定的显式刷写或隐式刷写模式,将数据再保存到HFile中。默认的存储模式是隐式存储。这个以后写client api的时候再介绍。。当然,这地方还有个注意的地方,当数据保存到MemStore,最后却没有保存到HFile中时,死机了。。HLog的作用来了,用户操作的指令保存在HLog中,它会将指令执行,再将重新保存到MemStore中,这样就可以完成后面的操作了。。
HFile负责的是实际数据的存储了,它是HBase中的最小单位了。它也可以进行拆分,也就是所谓的分区,让数据更加分散,读取数据的时候更加效率。
昨天未写完的部分今天补上。。
HBase的两个主要结构介绍完了,那么咱们现在就开始介绍一下它的存储流程和读取的流程。。
将它作为一个流程图可能不太合适。。不过它里面所需要的东西基本都包含了。。
先说下Zookeeper的作用:
存储了Root表的地址和HMaster的地址。存储ROOT的地址可以更快的查询到哪张表有数据,提高运算效率。存储HMaster地址是为了确定有哪些HMaster。
管理着MHaster。当HMaster失效时,它可以找到另一个HMaster,避免HMaster单点故障。
ROOT与.META与Region的结构是一样的,都是以键值对的形式保存数据。。
ROOT里面存储了对应的.META地址和开始结束信息(像1-5,说明ROOT里面存储了5个.META的地址信息)。
.META里面同样存储了对应的HRegion地址和开始结束信息。
好了,现在开始通过从客户端读取信息的角度开始分析了:
client要读取信息,先查询下client 端的cache中是否存在数据,如果存在,刚直接返回数据。如果不存在,则进入到zookeeper,查找到里面的相应数据存在的Root表中的地址。
通过数据存在ROOT表中地址找到.META,最终找到HRegion。找到HRegion后,它会先访问MemStore中是否存在数据,如果存在,则直接读取。如果没有,就再到HFile中查找数据,并将数据放到MemStore。
最后数据返回到客户端显示。。
存储数据流程:
由于Hbase中默认的刷写方式是隐式刷写,所以你在put()数据时,它会自动保存到HRegion上,但当你批量处理数据时,它会将数据先保存到client端的cache中。当你关闭隐式刷写时,你put()的数据则会保存到client cache中,直到你调用刷写命令时,才会保存到HRegion中。具体的命令等明天我去公司的时候贴上来。。在家没环境。。
在HRegion部分的存储:要写入的数据会先写到HMemcache 和Hlog 中,HMemcache 建立缓存,Hlog 同步Hmemcache和Hstore 的事务日志,发起Flush Cache 时,数据持久化到Hstore 中,并清空HMemecache。
此处需要关注:
HBase 写数据,首先写入Memcache,并计入Log中,最后写入HStore中,如果在写入HStore是发生系统异常,就可以从Log中恢复数据,重新写 入HStore中。
感谢各位的阅读!关于“HBase体系结构是怎么样的”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。