1.HBase是依赖HDFS的,HBase的数据是存在RegionServer上的,然后RegionServer数据又存在于datanode.
2. HBase有两个节点Master(主)和RegionServer(从)
3. HBase操作表的时候需要元数据,元数据存在zooKeeper上面.
4. 之前学习中,有一条数据,这条信息的所有数据都先进到内存中,然后再把内存中的数据溢写到磁盘里面,但是HBase不是.这样不安全,内存数据会丢失.

一. HBase存储数据一个过程

HBase不支持事务的回滚和撤销,所以

HBase会先把数据写到本地Hlog中

然后把Hlog的数据存储到HDFS中

用到的技术WAL(预写式日志).write-Ahead-log

如果写入Hlog成功后,才会把数据放到内存中.

如果Hlog写入失败,不会把数据放到内存中.

内存中的阈值为64M,如果达到会把数据写到region

( 一个RegionServer里面存在多个region)

如果当前内存存储的数据达到当前当前虚拟机堆内存总大小40%,也会开始写入.

如果最后regin存在要写入的数据,整个过程才成功,否则,这个数据是写入不成功的.

6.好处

HBase这样存储数据的好处是,当内存向region传输数据的时候,突然中断,那么region中就会存在脏数据,也就是读取一半数据,并没有意义,但是虽然中断,但是Hlog中的数据依旧存在,当恢复以后,内存从Hlog重新读取数据传入到region中.并删除掉之前的脏数据.

但是如果是数据向Hlog写入过程突然中断的话,依旧会造成数据丢失.

hbase元数据丢失无法启动 hbase元数据在哪里_客户端


二.HBase的参考系统时Zookeeper

hbase元数据丢失无法启动 hbase元数据在哪里_数据_02


hbase的元数据存储在Zookeeper中的

当用户启动HBase时候,启动了HMaster,RegionServer

当HMaster启动成功的时候,会从Zookeeper中拿RegionServer的region所有数据信息.

当HMaster启动成功的时候,会向Zookeeper写入当前自己运行的状态,为了高可用以及HMaster和RegionServer之间的通信.

当HMaster初始化的时候,会从Zookeeper将所有信息一次性加载到自己这里.,当客户端有对数据操作请求的时候,会先访问HMaster,然后HMaster会把客户端要访问的RegionServer中的region的位置返回给客户端,也就是元数据给客户端.

客户端拿到元数据后直接去操作region,读和写的过程都是直接操作region.

如果HMaster挂掉后,客户端仍然可以操作region,但是由于HMaster挂掉了,可能会造成数据不一致的情况,造成数据损失,所以要及时监控HMaster的状态.

三.HBase和RDBMS对比
RDBMS
结构:
数据库以表的形式存在
支持FAT,NTFS,EXT文件系统
使用Commit log存储日志
参考系统是坐标系统
使用主键(PK)
支持分区
使用行,列单元格

功能:
支持向上扩展
使用SQL查询
面向行,即每一行都是一个连续单元
数据总量依赖于服务器配置
适合结构话数据(也就是有固定数据类型的数据)
传统关系型数据库一般都是中心化的
支持事务,支持Join,ACID

HBase
结构:
数据库以region的形式存在
支持HDFS文件系统
使用WAL存储日志
参考系统时Zookeeper
使用行键(row key)
支持分片
使用行、列、列族和单元格

功能:

支持向外扩展

使用API和MapReduce来访问HBase表数据

面向列,即每一列都是一个连续的单元

数据总量不依赖具体某台机器,而取决于机器数量

HBase不支持ACID(Atomicity,Consistency,Isolation,Durability)

适合 结构化数据和非结构化数据

一般都是分布的

HBase不支持事务

不支持Join

hbase元数据丢失无法启动 hbase元数据在哪里_hbase元数据丢失无法启动_03