HBase体系结构是怎么样的

这篇文章给大家分享的是有关HBase体系结构是怎么样的的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

     HBase是Apache hadoop集群中常用的非关系型数据,它是一种开源的、分布式的、多版本、面向列存储的数据库。

     它的源码在 https://github.com/apache/hbase 上,妥妥的开源啊。。。

     分布式是因为它的数据最后存储在HDFS上,所以它继承了hadoop分布式的优良传统(不知道能否这么理解)。

    多版本就不多介绍了,版本更新快呗。。。

     面向列的存储是它与传统关系型数据库最大的区别之一,它是根据rowKey、columnfamily、quaifer、timestamp(如果你有多版本的话)得到你最后的value值。。这个咱们以后再介绍,今天主要想写的是hbase的体系结构。

  HBase体系结构是怎么样的  hbase 第1张

  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的两个主要结构介绍完了,那么咱们现在就开始介绍一下它的存储流程和读取的流程。。

HBase体系结构是怎么样的  hbase 第2张

将它作为一个流程图可能不太合适。。不过它里面所需要的东西基本都包含了。。

先说下Zookeeper的作用:

  1. 存储了Root表的地址和HMaster的地址。存储ROOT的地址可以更快的查询到哪张表有数据,提高运算效率。存储HMaster地址是为了确定有哪些HMaster。

  2. 管理着MHaster。当HMaster失效时,它可以找到另一个HMaster,避免HMaster单点故障。

ROOT与.META与Region的结构是一样的,都是以键值对的形式保存数据。。

ROOT里面存储了对应的.META地址和开始结束信息(像1-5,说明ROOT里面存储了5个.META的地址信息)。

.META里面同样存储了对应的HRegion地址和开始结束信息。

好了,现在开始通过从客户端读取信息的角度开始分析了:

  1. client要读取信息,先查询下client 端的cache中是否存在数据,如果存在,刚直接返回数据。如果不存在,则进入到zookeeper,查找到里面的相应数据存在的Root表中的地址。

  2. 通过数据存在ROOT表中地址找到.META,最终找到HRegion。找到HRegion后,它会先访问MemStore中是否存在数据,如果存在,则直接读取。如果没有,就再到HFile中查找数据,并将数据放到MemStore。

  3. 最后数据返回到客户端显示。。

存储数据流程:

    由于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体系结构是怎么样的”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:niceseo99@gmail.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

评论

有免费节点资源,我们会通知你!加入纸飞机订阅群

×
天气预报查看日历分享网页手机扫码留言评论Telegram