HBase学习笔记-入门(1)-HBase基本介绍
HBase介绍
HBase是一个开源的、分布式的、版本化的非关系型数据库(NoSQL),底层利用HDFS提供分布式数据存储。HBase可以对数据进行随机存取和检索,可以存储结构化和半结构化的数据,例如一些网站内容,日志信息等等可以存放在HBase中。
- HBase是BigTable的开源Java版本,底层建立在HDFS之上,提供高可靠,高性能、列存储、可伸缩、实时读写等功能,属于NoSQL
- 在HBase中仅能够通过主键和主键的range来进行数据检索,并且仅支持单行事务
- 主要用来存储结构化和半结构化的数据
- HBase仅提供简单的数据查询功能,不支持join等复杂操作,不支持复杂事务,相比传统的关系型数据库来说,HBase缺少很多特性,例如不支持带类型的列,不支持二级索引以及高级查询语言等
- HBase中支持的数据类型为:byte[ ]
HBase应用场景举例:对象存储、时序数据、推荐画像、时空数据、CubeDB OLAP、消息 / 订单、爬虫数据存储、海量数据备份、短网址...
HBase的特点:
数据量大:一个表可以有上十亿行,上百万列,并且可以在横向和纵向两个维度插入数据,具有很大的弹性。而HBase采用LSM树作为内部数据存储结构,这种结构会周期性地将较小文件合并成大文件,以减少对磁盘的访问
面向列的存储:HBase内部使用面向列(族)的存储和权限控制,列(族)独立检索。其中的每个列是单独存储的。
行存储的情况:一张表的数据存放在一起,进行数据的插入和更新会相对容易,但是查询操作需要读取所有(大部分)的数据
列存储的情况:一张表按照列分开存储,查询操作仅需要读取相关列即可,可以大幅降低系统的I/O吞吐量
稀疏存储:对于为空的列,并不会占用存储空间。因此,表可以设计得非常稀疏,在很大程度上节省了存储开销
强扩展性:HBase底层为HDFS,支持分布式存储。HBase同样具有横向扩展性,通过增加集群中的服务器数量来提升集群的容量和性能
HBase表根据Region大小进行分区,分别存放在集群中不同节点上。当添加新的节点时,集群会进行重新调整,在新的节点上启动HBase服务器,动态地实现扩展。
HBase的扩展是热扩展,可以在不停止现有服务的情况下,动态增减节点。
高可靠性:HBase运行在HDFS之上,HDFS的多副本存储机制可以让HBase实现出现故障时的自动恢复,同时HBase内部也提供WAL和Replication机制。当集群中的单个节点出现故障的时候,协调服务组件Zookeeper会通知集群的主节点,将故障节点的HLog中的日志信息分发到各个从节点中进行数据恢复
WAL(Write-Ahead-Log)预写日志:在HBase服务器处理数据插入和删除的过程中用来记录操作内容的日志。在执行操作之前先写入日志,保证数据写入的时候不会因集群异常而导致写入数据的丢失。
Replication机制:基于日志操作做数据同步。
HBase对比
HBase vs RDBMS
HBase | RDBMS |
---|---|
数据以表的形式存在 | 数据以表的形式存在 |
支持HDFS文件系统 | 支持多种文件系统(FAT,NTFS,EXT...) |
使用行键进行访问 | 使用主键进行访问 |
原生支持分布式存储和计算引擎 | 可以通过外部中间件支持分库分表,但是底层还是单机引擎 |
具有行、列、列族、单元格等概念 | 具有行、列、单元格等概念 |
支持横向扩展 | 支持向上的纵向扩展 |
使用API、MapReduce、Spark、Flink等来访问数据 | 使用SQL进行查询 |
面向列族的存储,每个列族都是一个连续的单元 | 面向行的存储 |
不支持事务(支持单行数据的事务操作),不支持ACID特性 | 支持事务,并且保证事务的ACID特性 |
适合结构化数据和非结构化数据 | 适合结构化数据 |
一般是分布式的 | 一般是中心化的 |
不支持join等复杂操作 | 支持join等复杂操作 |
HBase vs HDFS
HDFS是一个非常适合存储大型文件的分布式文件系统,但是不是一个通用的文件系统,无法在文件中快速查询某个数据。
HBase构建在HDFS之上,并为大型表提供快速查找(和更新)的操作。HBase内部将大量数据放在HDFS中名为StoreFiles
的索引中,以便进行高速查找。HBase比较适合做快速查询等需求。
HBase vs Hive
Hive是一种数据仓库工具,它的本质相当于将HDFS中已经存储的文件在MySQL中做一个映射,以便使用HQL去管理查询。Hive通常用于数据分析和清洗,因为延迟较高,所以适用于离线的数据分析和清洗。Hive也是基于HDFS和MapReduce的,Hive存储的数据依旧在DataNode上,编写的HQL语句最终转换成MapReduce代码进行执行。
HBase是一种面向列存储的非关系型数据库,用于存储结构化和非结构化数据,不适合做关联查询等操作。HBase基于HDFS,数据持久化存储的体现形式是HFile,存放在DataNode中,被RegionServer以region等形式进行管理。同时延迟较低,适合接入在线业务使用。
总结来说,Hive和HBase是两种基于Hadoop的不同技术,Hive是一种类SQL的引擎,运行MapReduce任务;HBase是一种基于HDFS的键值对NoSQL数据库。两种技术可以同时使用,Hive用来进行统计查询,HBase用来进行实时数据查询,数据可以从Hive写入到HBase,或者从HBase写入Hive。