初识HBase

HBase是一个开源的,分布式的,多版本的,面向列的存储模型。

面向列:简单来说,就是指在存储数据库中的数据时,以列为单位来存储,把一列的数据串在一起存储起来,而非把一行的数据作为一个单元存储起来。
HBase的特点:

  • HBase是构建在HDFS上的列式存储系统
  • 基于Google的BigTable模型开发,典型的key/value系统
  • 逻辑上,HBase将数据按照表,行和列进行存储
  • HBase主要靠横向的扩展,通过不断地增加廉价的商用服务器来增加计算和存储能力。

HBase表的特点

  • 大:一个表可以有十几亿行,上百万列
  • 无模式:每行都有一个可排序的主键和任意多的列,列可以根据需要动态的增加,而同一张表中不同的行可以有截然不同的列
  • 面向列:面向列的存储和权限控制,列独立的检索
  • 稀疏:空(null)列不占用存储空间,可以设计的非常稀疏
  • 数据多版本:每个单元的数据有多个版本,自动的分配版本号
  • 类型单一:一切都是字符串,无其他类型

HBase的体系结构

初识HBase_第1张图片
HBase服务器体系结构遵从简单的主从服务器架构,由HRegion服务器集群和HMaster服务器构成。

HRegion

当表大小超过设置值,会自动分配不同的域,称为HRegion

HRegion服务器

一般一台机器上面只运行一个HRegion服务器,每一个区段的HRegion只会被一个HRegion服务器维护
HRegion服务器主要由两大部分:HLOG部分和HRegion部分。HLOG用来存储数据日志,采用的是先写日志的方式,即数据来的时候,先会记录进日志里面,后才存入HRegion中。HRegion服务器由多个HRegion组成,而HRegion则是由多个store组成,一个store存储的是同一列族下的数据。每个HRegion都有一个Memstore,作为数据缓冲,当数据发送来的时候,会先写入 Memstore中,等到缓冲区满了之后,再更新到对应的storefile中,store中包含多个storefile,storefile负责实际数据的存储,为HBase的最小单元。

HBase Master服务器

每台HRegion服务器都会与HMaster服务器进行通讯,而HMaster的主要任务就是告诉每个HRegion服务器它需要维护的HRegion。
HMaster主要负责Table和HRegion的管理工作,具体包括:

  1. 管理用户对Table的增删改查
  2. HRegion服务器的负载均衡,调整HRegion的分布
  3. HRegion分裂后,负责新的HRegion的分配
  4. HRegion服务器停机后,负责实效的HRegion服务器上HRegion的迁移

ROOT表和META表

保存元数据的表,我们称之为META表,随着元数据的增长,META表会被分割成几个HRegion,为定位这些HRegion,需要一个表,这个表就称之为ROOT表,ROOT表不能被分割,永远只存在一个,且名称固定。

ZooKeeper

ZooKeeper集群是协调系统,存储的为HBase中ROOT表和META表的位置,并负责监控机器状态,当HMaster出故障后,ZooKpeer负责HMaster的恢复工作。

HBase的常用命令

以一个例子来展示HBase常用操作

Person 表内容如下:

初识HBase_第2张图片

  1. 列出当前都有哪些表
$ show

这里写图片描述
2. 创建表

$ create ,,...
$ create 'person','private data','public data' 
  

这里写图片描述
3. 显示表的详细信息

$ desc/describe 
$ desc 'person'

初识HBase_第3张图片
4. 插入数据

$ put 
,,,<value> $ put 'person','1','private data:age','25' $ put 'person','1','private data:birthday','08-05' $ put 'person','1','public data:name','xiaoming' $ put 'person','1','public data:sex','man' $ put 'person','2','private data:age','23' $ put 'person','2','private data:birthday','04-20' $ put 'person','2','public data:name','limei' $ put 'person','2','public data:sex','woman'

初识HBase_第4张图片
5. 更新数据
同插入数据,直接覆盖原值就可以
6. 显示已存在的数据

$ get 
, $ get 'person','1' $ get 'person','2'

初识HBase_第5张图片
7. 删除数据

$ delete <table name>,'row name',,timestamp
$ delete all <table name>,'row name'
$ delete 'person','1','public data:name', 1501940429288
$ delete all 'person','1'

初识HBase_第6张图片
初识HBase_第7张图片
8. 删除表

$ disable 
# 先禁用表 $ drop
$ disable 'person' $ drop 'person'

初识HBase_第8张图片

你可能感兴趣的:(Hadoop,数据库)