hbase优点与数据检索流程

来源:互联网 发布:求素数的java程序 编辑:程序博客网 时间:2024/05/22 13:17

hbase优点

hbase是一个列式存储的非关系型数据库,依赖于zookeeper。数据存储于hdfs上,主节点是HMaster,从节点是HRegionServer.

hbase与关系型数据库相比较优点如下:1. hbase数据存储于hdfs上,可扩展性强。数据条目数可以存储上一条。2. 通过rowkey检索数据,速度可以准实时,达到秒级别。3. 写数据非常快,只要写在Region的memstore内存中即可,不需要重复IO消耗。4. 每份数据都有多份备份,保证数据安全性。5. 从成本上来说关系型数据库要用到商用小型机,价格要几百万非常昂贵。但是hdfs只需要普通的商用server,只要几万一台。

hbase数据模型

这里写图片描述

region介绍

每个表刚开始只有一个region,region的strartRowKey和endRowKey都是空的。当region的大小超过一定的阀值后,就会按照key的中间值分裂成两个region,老的region下线。比如中间值是111000,则新的2个region如下:

null
      region1
111000
      region2
null
rowkey按照大小排序,新的rowkey会按照大小插入对应的region

数据检索的三种方式

1)get rowkey2)scan range  -->  最多的3)scan 

hbase数据检索流程

hbase架构图
hbase架构图

客户端对数据的读和写首先连接zookeeper,在zookeeper中找到meta-region-server节点,meta表被哪个RegionServer管理。meta表只有一个region,客户端通过表+rowkey在meta表中找这个表的rowkey被哪个RegionServer管理。meta表保存了对应的主机端口,找到后执行相应的操作。

list_namespace_tables 'hbase'查看hbase命名空间下的表
scan 'hbase:meta' 查看meta表信息

hbase数据存储

  1. 客户端通过zookeeper找到相应的RegionServer后找到对应的region。

  2. HMaster连接zookeeper,知道哪些RegionServer是活着的

  3. get /hbase/rszNode节点中,一个RegionServer有一个目录[主机,端口,启动时间]

一张表有1个或多个region,region有几个列簇就有几个store。每个store中有一个memstore和0个或多个storefile。storefile是存在hdfs上的二进制文件,读数据先到memory中读,没有在去storefile中读在写数据的时候先往HLog写一份,在往memstore中写一份。当memory达到一定大小后,flush到storefile里面去。

注意:

  1. 这样做的目的是为了当memstore节点挂掉后,重新启动可以通过HLog恢复
  2. 当storefile超出一定大小后会分裂成两个storefile
    3.只有当多个storefile合并时,原本删除的数据才会真正的删除,之前只是cell打一个标签不让其显示

优化:

  1. 将具备共同IO特性的column放在一个列簇中,提高读取速度
  2. 一个regionserver管理多个region,每个region都有一个memstore所以regionserver内存可以设置大一点。
老版本是一个regionserver一个HLOG,而新版本可以设置一个region一个HLog。老版本对数据恢复需要分割日志,而新版本可以直接对region的日志做数据还原。但是需要消耗更多的IO,因为要同时打开多个HLog。

数据检索总结

client写入-》存入MemStore,一直到MenStore满-》Flush成一个StoreFile,直至增长到一定阀值-》触发合并操作-》多个storeFile合并后,逐步形成越来越大的storefile-》单个storeFile大小超过一定阀值后,触发split操作,把当前region 分成2个region,region下线。新split出的2个孩子region会被HMaster分配 到相应的HRegionServer上,使得原先的region的压力分流道2个region上

注意:

hbase只是增加数据,所有的更新和删除操作,都是在文件合并阶段做的。所以用户写操作只需要进入内存即可立即返回,从而保证I/0高性能

hbase架构

client端

  • 整个HBase集群访问的入口
  • 使用HBase采用Rpc机制与HMaster与HMaster和HRegionServer进行通信
  • 与HMaster进行通信进行管理类操作
  • 与HRegionServer进行数据读写类操作
  • 包含访问HBase的接口,并维护cache来加快对HBase的访问

HMaster

Client访问hbase上数据的过程并不需要master参与(寻址访问Zookeeper和HRegion Server)数据读写访问HRegion Server,HMaster仅仅维护table和Region的元数据信息,负载很低

  • HMaster没有单点问题,HBase中可以启动多个HMaster,通过Zookeeper的Master Election机制保证总有一个Master在运行主要负责Table和Region的管理工作 管理用户对table的增删查改操作

    在HBase的conf目录下创建backup-masters文件,在里面添加其他主机名称。
    保存后执行hbase-deamons.sh start master-backup

  • 管理HRegionServer的负载均衡,调整Region分布 Region Split后,负责新Region的分布

  • 在HRegionServer停机后,负责失效HRegionServer上Region迁移工作

HRegionServer

  • 维护HRegion,处理对这些HRegion的IO请求,向HDFS文件系统中读写数据;
  • 负责切分在运行过程中变得过大的HRegion

zookeeper

  • 保证任何时候,集群只有一个HMaster
  • 存储所有HRegion的寻址入口
  • 实时监控HRegionServer的上线和下线功能,并实时通知给HMaster
  • 存储HBase的schema和table元数据
  • zookeeper Quorum存储-ROOT-(新版本是meta表)地址、HMaster地址

hbase管理zookeeper实力,但是在生产环境中要禁用

注意:hbase-env.xml中,找到export HBase_managers_zk设置为false

0 0
原创粉丝点击