【博学谷学习记录】超强总结,用心分享|HBase介绍和HBase表模型
一、HBase相关概念
1 HBase产生的背景
HDFS是分布式文件存储系统,其特点是吞吐量极高,适合于进行批量数据处理工作,随机的读写能力很差。然而,实际生产环境中,有时候数据量非常大,但是又希望能对数据进行随机的读写操作,并且速度不能太慢,这该如何解决?
HBase应运而生,HBase的诞生就刚好适用于解决这一难题。
2 HBase基本介绍
(1)HBase是一款NoSQL型数据库,不支持SQL,没有表关系,无法进行Join操作,不支持事务(仅仅支持行级事务)。
(2)HBase是基于google发布BigTable这篇论文而产生的,基于HDFS,也就说数据最终是存储到HDFS上,如果后续想要启动HBase,必须先启动HDFS。
(3)查询HBase的数据一般有以下几种方式:
第一种:通过主键来检索;
第二种:通过主键的范围检索;
第三种:查询全部数据。
(4)存储的以结构化数据和半结构化的数据为主。
(5)HBase的存储都是以字节类型存储的。
(6)HBase的表的特点:
大: 可以存储上十亿行的数据,也可以拥有上百万个列。
面向列的存储方式:列指的列族(列簇)。
稀疏性:对于Null值,在HBase中是不占用任何的存储空间的,所以表可以建的非常的稀疏。
3 HBase应用场景
(1)数据需要进行随机读写操作;
(2)数据体量大,达到TB级以上;
(3)数据结构比较稀疏。
在实际生产环境中,如果发现数据已经具备以上三点中的两点,就可以尝试使用HBase,如果三种都满足,一般就确定采用HBase。
4 HBase和其他技术的区别
4.1 HBase和RDBMS区别
HBase:以表的形式存储 ,存在行键(row key) ,不支持SQL ,不支持事务(仅行级事务) ,无表关系,不支持Join,采用分布式存储引擎,基于HDFS的文件存储系统,支持结构化和半结构化的数据。
RDBMS:以表的形式存储 ,存在主键(primary key),支持SQL,支持事务,存在表关系,支持Join,采用单机的存储引擎,基于本地文件系统,支持存储结构化数据。
4.2 HBase和HDFS的区别
HBase:基于HDFS,与HDFS是一种强依赖的关系,启动HBase必须先启动HDFS,数据最终落在HDFS上,支持高效的随机读写的特性,吞吐量相对于HDFS比较低,适合于实时处理。
HDFS:适合于批处理,吞吐量极高,不支持随机读写的能力,存储更多是一些过去已经发生过的数据。
4.3 HBase和Hive的区别
HIVE:数据仓库的工具,主要是用于离线数据分析处理,主要对接的离线的处理业务,基于hadoop,高延时。
HBASE:nosql型数据库,主要是用于数据的存储工作,主要对接实时业务,基于hadoop,低延迟。
二、HBase表模型
1- rowkey: 行键, 类似于MySQL中每个表都会有主键, 同样类似于 kv类型中key
在hbase中, 数据会默认进行排序操作, 排序的规则为基于rowkey进行字典升序排序
例如: 1 3 15 2 13 25 请问, 如果按照字典升序排序, 结果是什么呢?
结果为:
1 13 15 2 25 3
规则: 先比较第一位, 如果第一位相同, 比较第二位, 没有第二位比有第二位的小, 依次类推
查询方式:
第一种: 根据rowkey查询
第二种: 根据rowkey的范围查询
第三组: 查询全表数据
2- column family: 列族(列簇)
在创建表的时候, 需要指定列族信息的, 一个表 是可以有多个列族
在hbase中是基于列族管理和管理的, 一个表中建议列族不要太多了, 能少则少, 能用一个解决的, 坚决不用多个
在一个列族下可以有多个列(列限定符号), 最大支持上百万个列
3- 列限定符号(列名): 一个列族下可以有多个列名, 但是一个列名只能被一个列族所管理, 列的数量可以达到上百万, 在建表的时候, 不需要指定的, 在插入数据的时候, 动态执行即可
4- timestamp(时间戳): 在hbase的表中, 每一个单元格的数据都是有时间戳的概念的, 默认 为插入数据的时间, 当然也可以人为指定
5- version(版本号): 在hbase中每一个单元格都是有版本号的概念的, 可以基于版本管理, 存储每一个单元格的历史变化信息
默认版本号为1, 表示只保留最新的版本数据
6- cell(单元格): rowkey + 列族 + 列名 + 列值
注意: 在建表的时候, 必须指定两项内容: 表名 + 列族