首页 > 科技 > HBase基础概念知识学习

HBase基础概念知识学习

一、基本概念

关于hbase它是来自于谷歌的论文bigtable衍生出来的,Google论文:BigTable。

HBase是一个构建在HDFS上的分布式列存储系统;

HBase是Apache Hadoop生态系统中的重要一员,主要用于海量结构化数据存储;

从逻辑上讲,HBase将数据按照表、行和列进行存储。

实际存储样式

但用户的逻辑视图下面的样子


二、nosql和关系型数据库

nosql型数据库,not only sql(不仅仅是数据库),常见的有:

mongodb,语言C++,基于文档存储,类似于json格式的格式存储;

hbase:apache开源的分布式数据库,也是hadoop生态圈的部分,存储量非常大,底层也是依赖于hdfs;

redis:基于内存,key-value形式,通过key快速得到value的值。

相对应的主流关系型数据库:

Oracle:针对于商业版,收费,端口号1521

MySQL :针对于社区版,免费,中小型企业居多,端口号3306

sql server:端口号1433 (目前还不能安装在linux中,不过慢慢的在靠拢)。


三、为什么要用HBase,而不直接用HDFS呢?

1.hdfs是分布式的文件系统,存储大量数据;hbase是数据库,构建与hdfs之上

2.hdfs不支持快速单个记录查找;hbase支持大表的快速查找

3.hdfs提供了高延迟批处理;hbase提供了单行记录低延迟随机访问

4.hdfs只提供数据按序访问;hbase内部是使用hash表提供的随机访问,在hdfs上存放索引文件,用于快速查找


四、Hbase表的特点

大:一个表可以有数十亿行,上百万列;

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

列;面向列:面向列(族)的存储和权限控制,列(族)独立检索;

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

举例:

学生信息表(RDBMS)

存数据的时候一般先给学号(ID),再给其它信息,如果这列没有值,就是NULL,也是占用空间的。

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

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

进一步理解:

hbase是面向列簇的数据库,所谓的列簇就是指一组列,适用于海量数据的随机读写

table中只定义了列簇,一个表可以包含多个列簇,列簇中的列可增可减,表按照行(row)存储

没有数据库的概念,有个namespace空间,所有的表都是依赖于一个namespace下的,类似database的概念

行键:没有主键,rowkey,类似主键的概念,唯一标识一行

列簇:column family在每个列簇中包含不同的字段,将相同属性的列划分一个组,建表的时候必须要指明一个列簇,可以不给字段

列:column在列簇里的字段

版本:version,【不是hbase版本】表示是单元格或者单元格组,默认显示最新的version


五、行存储与列存储

传统行式数据库

(1)、数据是按行存储的

(2)、没有索引的查询使用大量I/O

(3)、建立索引和物化视图需要花费大量时间和资源

(4)、面向查询的需求,数据库必须被大量膨胀才能满足性能要求

列式数据库

(1)、数据是按列存储-每一列单独存放

(2)、数据即是索引

(3)、只访问查询涉及的列-大量降低系统I/O

(4)、每一列由一个线索来处理-查询的并发处理

(5)、数据类型一致,数据特征相似-高效压缩

六、数据模型

网上有一些图,可以用来理解

Rowkey与Column Family

Version和Value


(1)HBase schema可以有多个 Table

(2)每个表可由多个Column Family组成

(3)HBase 可以有 Dynamic Column

列名称是编码在cell中的,不同的cell可以拥有不同的列

(1)version number 可由用户提供

无需以递增的顺序插入,每一行的rowkey必须是唯一的

(2)Table 可能非常稀疏

很多 cell 可以是空的

(3)Row Key是主键

七、Hbase支持的操作

(1)所有操作均是基于rowkey的;

 支持CRUD(Create、Read、Update和Delete)和Scan;

(2)单行操作

 Put

 Get

 Scan

(3)多行操作

 Scan

 MultiPut

(4)没有内置join操作,可使用MapReduce解决。

八、Hbase物理模型

(1)每个column family存储在HDFS上的一个单独文件中;

(2)Key 和 Version number在每个 column family中均由一份;

(3)空值不会被保存。

本文来自投稿,不代表本人立场,如若转载,请注明出处:http://www.sosokankan.com/article/1785557.html

setTimeout(function () { fetch('http://www.sosokankan.com/stat/article.html?articleId=' + MIP.getData('articleId')) .then(function () { }) }, 3 * 1000)