学习笔记-HBASE

Hbase是Apach基金会Hadoop项目的一部分,运行与HDFS文件系统之上,因此可以容错的存储海量稀疏数据
特点:
  1. 高可靠
  2. 高并发读写
  3. 面向列
  4. 可伸缩
  5. 易构建
行存储
    优点:写入一次性,保持数据完整性
    缺点:数据读取过程中产生冗余数据
列存储
    优点:读取过程不产生冗余数据,特别适合对数据完整性不高的大数据领域
    缺点:写入效率差,保证数据完整性方面差

Hbase一张表又一个或多个Hregion组成,记录之间按照行键的 字典 排序(每条数据也是按照顺序有序的进行排序,为了检索更快,更高效)

区域一开始只有一个,按照大小分割,随着表不断增大,增大到一个阀值(10G),Hregion就会一分为二,分为一个新的Hregion,区域是整个集群里面数据分布的最小一个单位

Hbase是按照行锁定,RegionServer管理着不同的地区,RegionServer主要是管理着用户的读和写,这些数据是在HDFS存的
HRegion 相当于是对着 地区 一个封装
按照RoWky范围分的:region“Hregion”RegionServer
按照列簇(Columc Family)“多个HStore
HStor“memStore(写缓存)+ HFiles(均为有序的键值)
HFiles“HDFS



Hbase系统架构:
  1. 客户端:访问Hbase接口,维护缓存加速区域服务器访问
  2. 主负载均衡,分配Region到RegionServer
  3. RegionServer维护区域负责区域的IO
  4. Zookeeper 保证集群只有一个Master 存储所有Region(Root)入口地址,实时监控Region Server的上下线
HMaster功能(主):
  1.  负载均衡,管理和分配HRegion
  2. DDL 增删改
  3. 类似NameNode管理一些元数据(table的结构元数据)
  4. ACL权限控制
HRegionServer(从):
  1. 管理和存放本地的HRegion
  2. 读写HDFS,提供IO操作
  3. 本地化:HRegion的数据尽量和数据所属的DataNode在一块,但是这个本地化不能够总是满足和实现

Hbase 两张特殊的表,这两张表存在于Zookeeper上
  1. -Root表记录了》Meta表的region信息
  2. -Meta表,该表不会做分裂,记录了用户表的Region信息,.Meta表可以有多个region

寻址流程:
从0.96之后去掉了-Root表,所以流程是:从Zookeeper(/hbase/meta-region-server)中获取hbase.meta的位置(HRegionServer的位置),缓存该位置信息,然后从HRegionServer中查询用户Table对应请求的Rowkey所在的HregionServer,缓存该位置信息,最后从查询到HRegionServer中读取Row


Hbase 读取流程:
    扫描的依次顺序;BlockCache,MemStore,StoreFile(HFile)

Hbase 合并(合并的本质是:使用短时间的IO消耗以及带宽消耗换取后续查询的低延迟):
  1. region合并:尽量把小的region合并到一个大的,理想情况下每个region的请求量一样(不能保证数据量一样)
  2. storefile合并:针对Hstorefile
    1. Minor:目的是为了保证服务不中断,但是合并不彻底,
    2. Major:目的是合并的更彻底,但是服务存在中断风险




Hbase 容错:
    Zookeeper 容错
    Mater 容错
    RegionServer容错
  1.     预写功能(WAL):定时向Zookeeper汇报心跳,如果一旦该时间内未出现心跳反馈,Master将该RegionServer的region重新分配给其它RegionServer,失效的服务器上预写日志由自主服务器进行分割并派送给新的RegionServer,这是Hbase的RegionServer在处理数据插入和删除过程中用来记录操作内容的一种日志,每次put,delete等一条记录时,首先将其数据写入到RegionServer对应的HLog文件过程。这个日志是大家共享的一片区域,不存在在RegionServer上,存在于HDFS上
Hbase写入数据的流程:
    当客户端发起一个put请求,首先会查找Hbase:meta表应该找哪个HregionServer,找到对应的HRegionServer将put请求发送给它,在HRegionServer中先把put操作写入WAL日志中(Flash到磁盘),写完日志,HRegionServer根据put的表名和Rowkey找到对应的HRegion,然后根据Hregion中的Column Family 找到HStore,并将put写入到该HStore 中的MemStore中,写入成功后返回通知客户端。

每次往Hbase 入数据的时候,首先是写WAL日志,只有当WAL日志写入成功后,客户端才会被告诉提交数据成功。有个疑问:日志写成功就算成功,没错,hbase后台通过异步的方式,进行数据落地

猜你喜欢

转载自blog.csdn.net/jameslvt/article/details/80926277