hbase知识

HBASE是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统

HBASE的目标存储并处理大型的数据,更具体来说是仅需使用普通的硬件配置,就能够处理由成千上万的行和列所组成的大型数据。

HBASE利用Hadoop HDFS作为其文件存储系统

HBASE同样利用Hadoop MapReduce来处理HBASE中的海量数据

 

HBASE利用Zookeeper作为协同服务。

Pig和Hive还为HBase提供了高层语言支持,使得在HBase上进行数据统计处理变的非常简单

Sqoop则为HBase提供了方便的RDBMS数据导入功能,使得传统数据库数据向HBase中迁移变的非常方便

 

 

 

hdfs是适于存储大容量文件的分布式文件系统

hbase是建立在hdfs上的数据库

hdfs不支持快速单独记录查找

hbase提供较大的表快速查询

高延迟

低延迟记录访问

数据只能顺序访问

 

 

 

1.1.     与传统数据库的对比

1、传统数据库遇到的问题:

1)   数据量很大的时候无法存储

2)   没有很好的备份机制

3)   数据达到一定数量开始缓慢,很大的话基本无法支撑

 2、HBASE优势:

1)线性扩展,随着数据量增多可以通过节点扩展进行支撑

2)数据存储在hdfs上,备份机制健全

3)通过zookeeper协调查找数据,访问速度块。

 

hbase表优点:

:一个表可以有数亿行,列

无模式:每一行都有一个可排序的主键和任意多的列,列可以根据需要动态的添加,同一张表中的不同行可以有不同的列

面向列:列可以独立检索

稀疏:空(null)不占用存储空间,表可以设计的非常稀疏

数据多版本:每个单元中的数据可以有多个版本,默认情况下版本自动分配是插入数据时的

时间戳

数据类型单一:hbase中的数据都是字符串,没有类型

缺点:

不支持条件查询,只支持按照row key来查询

暂时不支持master server的故障切换,当master宕机后,整个存储系统挂掉

 

补充:

  1. 数据类型,Hbase有简单的字符类型,所有的类型都是交由用户自己处理,它只保存字符串。而关系数据库有丰富的类型和存储方式。
  2. 数据操作:HBase只有很简单的插入、查询、删除、清空等操作,表和表之间是分离的,没有复杂的表和表之间的关系,而传统数据库通常有各式各样的函数和连接操作。
  3. 存储模式:HBase是基于列存储的,每个列族都由几个文件保存,不同的列族的文件时分离的。而传统的关系型数据库是基于表格结构和行模式保存的
  4. 数据维护,HBase的更新操作不应该叫更新,它实际上是插入了新的数据,而传统数据库是替换修改
  5. 可伸缩性,Hbase这类分布式数据库就是为了这个目的而开发出来的,所以它能够轻松增加或减少硬件的数量,并且对错误的兼容性比较高。而传统数据库通常需要增加中间层才能实现类似的功能

hbase数据模型:

row key

time stamp

column   family

id

name

age

 

 

id:1001

name:lisa

age:21

 

 

row key:是字节数组,是表中每条记录的主键,table中的记录按照row key进行排序

column family:列簇拥有一个名称,table在水平方向上可以有一个或者多个列簇,每个列簇包含一个或者多个相关列(column),支持动态扩展,无需预先定义Column的数量以及类型

(version number)timestamp:默认是时间戳,用户可自定义

列簇由多个列组成,无需定义列的数量以及类型,支持动态扩展

 

随着table的数据内容增加,会被分成多个regions,每一个被分配到不同的regionserver进行管理

 

 

两张特殊的表MATE和ROOT

l  MATE记录用户表的region信息,可以有多个region

l  ROOT记录META表的region信息,只有一个region

zookeeper记录着ROOT表的location

 

用户访问数据过程:

Client访问用户数据之前需要首先访问zookeeper,然后访问-ROOT-表,接着访问.META.表,最后才能找到用户数据的位置去访问,中间需要多次网络操作,不过client端会做cache缓存。

zookeeper在hbase中的作用

Zookeeper Quorum中除了存储了-ROOT-表的地址和HMaster的地址,HRegionServer也会把自己以Ephemeral方式注册到Zookeeper中,使得HMaster可以随时感知到各个HRegionServer的健康状态

通过选举,保证任何时候,集群中只有一个master,Master与RegionServers 启动时会向ZooKeeper注册

存贮所有Region的寻址入口

实时监控Region server的上线和下线信息。并实时通知给Master

存储HBase的schema和table元数据

默认情况下,HBase 管理ZooKeeper 实例,比如, 启动或者停止ZooKeeper

Zookeeper的引入使得Master不再是单点故障

 

Hmaster

HMaster没有单点问题,HBase中可以启动多个HMaster,通过Zookeeper的Master Election机制保证总有一个Master运行,HMaster在功能上主要负责Table和Region的管理工作:

  1. 管理用户对table的增、删、改、查操作
  2. 管理HRegionServer的负载均衡,调整Region分布
  3. 在Region Split后,负责新Region的分配
  4. 在HRegionServer停机后,负责失效HRegionServer 上的Regions迁移

HregionServer

主要负责响应用户的I/O请求,向hdfs中读写数据,是hbase中最核心的模块

 

hbase的存储:

Hstore由memstore和storefile组成

用户写入数据会先放到memstore,当memstore满了以后会flush成一个storefile

当多个storefile增加到阈值会触发compact 合并操作,合并成一个storfile,这个过程中会进行版本合并和数据删除

 

Hlog对象

每个HregionServer都有一个Hlog对象

每次用户操作写入MemStore的同时,也会写一份数据到HLog文件中

当HRegionServer意外终止后,HMaster会通过Zookeeper感知到,HMaster首先会处理遗留的 HLog文件,将其中不同Region的Log数据进行拆分,分别放到相应region的目录下,然后再将失效的region重新分配,领取 到这些region的HRegionServer在Load Region的过程中,会发现有历史HLog需要处理,因此会Replay HLog中的数据到MemStore中,然后flush到StoreFiles,完成数据恢复

 

posted @ 2017-11-30 18:42  ccdh  阅读(292)  评论(0编辑  收藏  举报