HDFS: 分布式文件存储系统
特点: 吞吐量极高, 适合于进行批量数据处理的工作, 随机的读写能力比较差(压根不支持)
但是, 在实际生产环境中, 有时候的数据体量比较大, 但是希望能够对数据进行随机的读写操作, 而且不能太慢了, 那此时怎么办呢?
对于市场来说, 其实就迫切需要一款能够支持大规模化的数据存储以及能够进行高效的随机读写操作, 而HBase其实就是在这样的背景下, 产生了, 但是主要的思想来源于google发布的一篇论文: BigTable
1- HBase是一款NoSQL型的数据库, 不支持SQL , 没有表关系, 无法进行Join操作, 不支持事务(仅支持行级事务)
2- HBase是基于google发布BigTable这篇论文而产生的, 基于HDFS, 也就是说, 数据最终是存储到HDFS上, 如果后续想要启动HBase, 必须先启动HDFS
3- 基于Java语言开发的
4- 查询HBase的数据一般有以下几种方式:
第一种: 通过主键来检索
第二种: 通过主键的范围检索
第三中: 查询全部的数据
5- 存储的结构化数据和半结构化的数据
6- HBase的存储的都是以字节类型存储的
7- HBase表的特点:
6.1 大: 可以存储上十亿行的数据, 也可以拥有上百万个列
6.2 面向列的存储方案: 列值的是列族
6.3 稀疏性: 对于Null值, 在HBase中是不占用任何的存储空间的, 所以表可以搞的非常稀疏
HBase的应用场景
1- 数据是否需要进行随机读写操作
2- 数据体量比较大(建议TB级以上)
3- 数据比较稀疏
HBase和RDBMS区别### HBase和RDBMS区别
HBase: 以表的形式存储 存在主键(row key) 不支持SQL 不支持事务(支持行级事务) 无表关系 不支持Join 采用分布式存储引擎 基于HDFS文件系统, 支持存储结构化和半结构化数据
RDBMS: 以表的形式存储 存在主键(Primary Key) 支持SQL 支持事务 存在表关系 支持Join 采用单机存储引擎 基于本地文件系统,支持存储结构化数据
2.2 HBase和HDFS区别
HBase: 基于 HDFS, 与HDFS是一种强依赖的关系, 启动HBase, 必须先启动HDFS, 数据最终落在HDFS上, 支持高效的随机读写的特性, 吞吐量相对HDFS比较低, 适合实时处理
HDFS: 适合于批处理, 吞吐量极高的, 不支持随机读写的特性, 存储更多是一些过去已经发生过的数据
矛盾: 基于HDFS的HBase支持随机读写, 但是HDFS自己本身不支持, 既有联系, 又有矛盾,说明在HBase的上面一定是做了N多处理的, 才达到当前的这个效果
2.3 HBase和Hive区别
HIVE: 数据仓库的工具 主要是用于离线数据统计分析, 主要对接的离线业务, 基于 Hadoop 高延迟
HBASE: NoSQL型数据库 主要是用于数据存储工作, 主要对接实时业务, 基于Hadoop 低延迟
注意:
后续 可以让HIVE和HBASE集成在一起, 由HIVE读取HBase中数据, 进行离线统计分析操作, 本质上就是让HIVE换一个地方读取数据