本文正在参加「技术专题19期 漫谈数据库技术」活动 。
前言
之前的文章中学习了Kafka等中间件,也了解了ES、Redis等不同数据库的差异与使用,今天总结一下HBase相关知识,并通过虚机进行一下实验,总结一下常用命令等。
HBase简述
Hbase是一种分布式、可拓展、支持海量数据存储的NoSQL的数据库,分布式表示可以集群化部署,可扩展表示能够进行动态上下线,而NoSQL表示该数据库属于一种非关系型数据库。而Hbase能够进行海量数据存储,数据量越大,查询效率越明显,但是HBase也比较消耗内存,在一定条件下能够完成几十亿数据的秒级查询,并且实现了HDFS的随机写操作,总之HBase是一种利用了资源换取时间的数据库
HBase与HDFS的关系
上一部分提到了HDFS,作为应用广泛的文件系统,这句话就是HDFS与Hbase最大的区别,HDFS是文件系统,而HBase是数据库,两者其实没啥可比性,如果将HBase比作Mysql数据库,而HDFS则是硬盘,HBase只是一个非关系型数据库,将数据存储于HDFS之中。
此外,HBase在HDFS之上提供了高并发的随机写、并且支持实时查询,这是HDFS不具备的。
HBase的物理存储结构
常规数据库,例如MySQL是通过行式存储结构进行数据存储的,如下图所示:
而Hbase是通过列式存储的方式,因此属于非关系型数据库,列式存储如下图所示:
HBase表的每一行中,列的组成都是灵活的,行与行之间的列不需要相同。
列ID通过RowKey和Columns组成,而Columns的存储形式并不统一。
数据模型
HBase数据模型,逻辑上HBase的数据模型同关系型数据库很相似,数据存储在一张表中,有行有列,但是从Hbase的底层物理村塾结构(K-V)来看,HBase更像是一个多维度的矩阵,由下图所示:
表是由多个列族构成,每一个列族分别存储在不同的文件夹中,列可以是多个,也可以是一个,允许动态增减,行键是字典序,作为一行数据的主键。
Region表示一个表格按照数据量进行横向切片,用于划分不同的文件夹,以达到优化存储与查询策略的目的。
修改数据,时间戳和值不同,所以修改数据就是重新插入一条数据,读取的时候取时间戳大的,无用数据后期删除
数据结构
- Name Space
命名空间,类似于关系型数据库中的DataBase概念,每个命名空间下有多张表格,HBase有两个自带的命名空间,分别是hbase和default,其中hbase存放的是HBase的内置表格,default则是用户默认使用的命名空间
- Region
类似于关系型数据库表的概念,不同的是HBase定义表的时候只需要声明列族即可,不需要声明具体的列,这意味往Hbase写入数据的时候,字段可以动态、按需定义
- ROW
Hbase表中的每行数据都由一个RowKey和多个Colum组成,数据是按照RowKey的字典序存储的,并且查询数据时只需要根据RpwKey进行检索,所以十分重要。
- Cloumn
Hbase中的每个列都由Cloumn Family和Cloumn Qualifier限定,例如info:name ,info:age 建表格时只需要指明列族,而列限定符无需预先定义。
- Time Stamp
用于标识数据的不同版本,每条数据写入的时候,如果不指定时间戳,系统会自动为其加上该字段,其值为写入HBase的时间。
- Cell 唯一确定的单元,cell中的数据没有类型,全部由字节码形式存储。
基本架构
1、Client客户端,它提供了访问HBase的接口,并且维护了对应的cache来加速HBase的访问。
2、Zookeeper存储HBase的元数据(meta表),无论是读还是写数据,都是去Zookeeper里边拿到meta元数据告诉给客户端去哪台机器读写数据
3、HRegionServer它是处理客户端的读写请求,负责与HDFS底层交互,是真正干活的节点。
总结大致的流程就是:client请求到Zookeeper,然后Zookeeper返回HRegionServer地址给client,client得到Zookeeper返回的地址去请求HRegionServer,HRegionServer读写数据
Hbase安装
首先部署Hadoop
并且确保zookeeper正常运行:
- 下载
wget http://archive.apache.org/dist/hbase/1.3.1/hbase-1.3.1-bin.tar.gz
- 解压
- 修改hbase-env.sh
位置/home/hbase/hbase-1.3.1/conf
- 配置 hbase-site.xml
- 软连接 hadoop 配置文件到 HBase
- 启动hbase
- 访问16010端口
-./hbase shell
-
查看当前数据库中有哪些表 list
-
创建表 create 'student','info'
-
插入数据
-
遍历数据
-
更新数据
- 查看指定数据
-
查看数据条数
-
删除数据
- 删除表
disable ‘student’
drop ‘student’
本文正在参加「技术专题19期 漫谈数据库技术」活动 。